[英]sql with case in where clause
使用 SQL Server 2008——這是我最初的 SQL:
SELECT *
FROM MY_TABLE
WHERE FLDID = 1111
AND FLDFNAME = 'XXXX'
AND FLDLNAME = 'YYYY'
AND FLDDEPT = 'SCIENCE'
只有FLDREGISTERDATE
小於某個日期才需要檢查FLDDEPT
,否則不需要檢查部門條件。
嘗試使用下面但出現錯誤
關鍵字“CASE”附近的語法不正確
如何解決這個問題??
SELECT *
FROM MY_TABLE
WHERE FLDID = 1111
AND FLDFNAME = 'XXXX'
AND FLDLNAME = 'YYYY'
CASE
WHEN FLDREGISTERDATE < '2019-10-01'
THEN AND FLDDEPT = 'SCIENCE'
ELSE ''
END
您可以使用布爾表達式執行此操作。
...
WHERE FLDFNAME = 'XXXX'
AND FLDLNAME = 'YYYY'
AND (FLDDEPT = 'SCIENCE'
OR FLDREGISTERDATE >= '2019-10-01'
OR FLDREGISTERDATE IS NULL)
...
WHERE 子句需要一個條件。 CASE
表達式只能輸出一個值。 相反,您可以執行以下操作:
SELECT * FROM MY_TABLE
WHERE FLDID = 1111
AND FLDFNAME = 'XXXX'
AND FLDLNAME = 'YYYY'
AND FLDDEPT = CASE WHEN FLDREGISTERDATE < '2019-10-01' THEN 'SCIENCE' ELSE FLDDEPT END
現在,當FLDREGISTERDATE
>= 2019-10-01
因為FLDDEPT=FLDDEPT
時,最后一個條件將返回TRUE
。 在FLDREGISTERDATE < '2019-10-01'
的情況下,它將測試FLDDEPT = 'SCIENCE'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.