【问题标题】:How to use IF statement inside WITH?如何在 WITH 中使用 IF 语句?
【发布时间】:2017-07-12 04:07:37
【问题描述】:

找不到合适的例子(或者我只是看错了方向)。

根据传入的参数值,我需要将WHERE 的条件更改为SELECT

例如,我得到参数@bookType 的值为“All”,我需要做这样的事情:

IF @bookType = 'All'
  SELECT * FROM tBooks
  WHERE BookType != 'Template' AND BookGroup='Library'
ELSE
  SELECT * FROM tBooks
  WHERE BookType = @bookType AND BookStatus=@bookStatus

看起来很简单,但我需要在 WITH 中使用这个 IF:

WITH Books AS (
  IF...
  ...
), bookIds AS (
  ...
  ...
)

这不起作用,因为我开始收到'Incorrect syntax near IF'。我到底做错了什么?或者也许可以将这个IF 隐藏在WHERE 语句中(根据参数值更改位置)?

【问题讨论】:

  • 标记您正在使用的 dbms。 (该代码是特定于产品的。)
  • 更新标签(mssql,嗯,标签改成sql server)

标签: sql sql-server if-statement select with-statement


【解决方案1】:
;
WITH Books AS (

     SELECT * FROM tBooks
        WHERE
            (@BookType = 'All'  AND BookType != 'Template' AND BookGroup='Library')
            OR
            (@BookType <> 'All' AND BookType = @bookType AND BookStatus=@bookStatus)

)

【讨论】:

  • 哦……没想到这个变种……会试试的
  • 是的...成功了。现在我觉得很愚蠢,甚至没有考虑扩展 WHERE 语句......
猜你喜欢
  • 2015-04-26
  • 2012-02-28
  • 2018-12-06
  • 2019-11-14
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 2017-06-07
  • 2020-07-02
相关资源
最近更新 更多