使用SQL Server 2008-这是我的初始SQL:
SELECT *
FROM MY_TABLE
WHERE FLDID = 1111
AND FLDFNAME = 'XXXX'
AND FLDLNAME = 'YYYY'
AND FLDDEPT = 'SCIENCE'
仅当FLDDEPT
小于特定日期时才需要检查FLDREGISTERDATE
,否则无需检查部门情况。
尝试在下面使用,但出现错误
关键字“ 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
[自TRUE
开始,当FLDREGISTERDATE
为> = 2019-10-01
时,最后一个条件将返回FLDDEPT=FLDDEPT
。在FLDREGISTERDATE < '2019-10-01'
的情况下,它将测试FLDDEPT = 'SCIENCE'
。