【问题标题】:Using Case to Return Different Sets of Queries使用案例返回不同的查询集
【发布时间】:2014-12-25 18:10:50
【问题描述】:

我正在尝试创建一个返回两个单独查询的 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 可以是任何东西 - NULL、Item1 等等 - 我想提取所有内容。

感谢所有帮助!

【问题讨论】:

    标签: sql sql-server tsql subquery case


    【解决方案1】:

    您不能使用 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 语句 - 我会试试看!
    • 嗯 - 看起来它运行成功,但它没有吐出任何实际信息 - 它只是读取“命令成功完成”
    • 如果没有得到结果,可能是因为@ALob 不匹配Item1 或All。请检查我的编辑。这显示了如何为 If/Then 使用默认条件
    猜你喜欢
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2016-05-28
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2021-02-27
    相关资源
    最近更新 更多