我正在尝试创建一个返回两个单独查询的T-SQL查询(或者如果有更好的方法来编写这个,我真的很想知道如果不使用CASE
这也很好!我有兴趣知道!)
查询的简化准代码版本
DECLARE @ALob VARCHAR = 'Item1' /*Or User can write in 'All'*/
SELECT
CASE WHEN @ALob='Item1' THEN
(Select e.EventID, e.EventName, Count(*) Rows
From tbl_Events e
Where BLob='Item1')
WHEN @ALob='All'THEN
(Select e.EventID, e.EventName, Count(*) Rows
From tbl_Events e) END
因此,用户可以在DECLARE
部分'ALL'或'Item1'中书写,并根据他们放入的内容,显示第一个查询或第二个查询。
现在重要的是要注意第二个查询没有Where BLob='Item1'
这很重要,因为“全部”选择中的Lob可以是ANYTHING - NULL,Item1,等等 - 我想要拉出所有内容。
感谢所有帮助!
答案 0 :(得分:0)
您不能使用CASE / WHEN来控制执行流程。相反,你需要使用IF / THEN,如下所示:
DECLARE @ALob VARCHAR = 'Item1' /*Or User can write in 'All'*/
IF @ALob='Item1'
Begin
Select e.EventID, e.EventName, Count(*) Rows
From tbl_Events e
Where BLob='Item1'
End
Else If @ALob='All'
Begin
Select e.EventID, e.EventName, Count(*) Rows
From tbl_Events e
End
Else
Begin
Select 'Unrecognized selection'
End