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

Sql 使用Case返回不同的查询集,sql,sql-server,tsql,subquery,case,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

我正在尝试创建一个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'
,这一点很重要,因为“All”选择中的Lob可以是任何内容—NULL、Item1、任意内容—我想调出所有内容


感谢您的帮助

您不能使用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

嗯-老实说,我甚至不知道我可以使用IF/THEN语句-我会试试!嗯-看起来它成功运行了,但没有吐出任何实际信息-它只是读取“Command(s)completed successfully”(命令已成功完成)。如果您没有得到结果,可能是因为@ALob与Item1或所有项都不匹配。请检查我的编辑。这显示了如何为If/Then使用默认条件