使用Case返回不同​​的查询集

时间:2014-10-29 20:55:41

标签: sql sql-server tsql subquery case

我正在尝试创建一个返回两个单独查询的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,等等 - 我想要拉出所有内容。

感谢所有帮助!

1 个答案:

答案 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