SQL Server在if中选择(子查询结果0行使用不同的语句)

时间:2015-09-30 09:06:16

标签: sql-server-2008-r2 subquery

我在SQL Server 2008 R2中有一个表,我需要使用子查询获得结果。在某些情况下,子查询不返回任何结果,在这种情况下,我需要使用null条件的这些查询。

declare @InsID as int =12288 
declare @docentry as int = 28

select * 
from [Table1] a
where a.U_InsID = @InsID
  and a.DocEntry <> @docentry
  and a.U_ObjectType in ('1','5')
  and (month(a.U_Periode) in 
            (select max(MONTH(U_Periode)) 
             from [Table1] e 
             where e.U_InsID = a.U_InsID 
               and e.DocEntry <> @docentry 
               and (a.U_Status <> '2' or a.U_Status is null))
or (a.U_Periode is null and a.DocEntry <> @docentry and (a.U_Status <> '2' or a.U_Status is null))
)

在这个查询中,我随时得到“OR”结果......但是当子查询没有结果时我只想要“OR”的结果......

有什么想法吗?

祝你好运 奥利弗

1 个答案:

答案 0 :(得分:0)

好的,这是一张桌子。查询排除我正在处理的行,并且应该返回基于最大日期(月)的结果,如果不存在,则存在一个在句点中没有值的行。我需要得到这个。

在我的第一个例子中,“OR”在哪里获得这些句子,但是在任何时候......我在一分钟前发现了一个有效的解决方案......但我认为这不是一个好的但是它正在起作用.. < / p>

declare @InsID as int =12288 
declare @docentry as int = 31
declare @var as varchar(30)
--- get the max Month to U_InsID and not the actual Row '31'
set @var = (select max(MONTH(U_Periode)) 
    from [TABLE1] e 
    where e.U_InsID=@InsID
    and e.DocEntry <> @docentry 
    and (e.U_Status <> '2' or e.U_Status is null))

--- If there was no result do this....
if @var is null begin(
select * from [Table1] a
where a.U_InsID = @InsID
and a.DocEntry <> @docentry
and a.U_Periode is null and (a.U_Status <> '2' or a.U_Status is null)
)
end
else   ---- do this if there was a result...
select * from [TABLE1] a
where a.U_InsID = @InsID
and a.DocEntry <> @docentry
and month(a.U_Periode)=@var  and (a.U_Status <> '2' or a.U_Status is null)

而且我正在寻找一种更平滑的方式,而不是使用这个IF ... Else

我认为查询本身应该有一个解决方案...... 最好的祝福 奥利弗