带where子句的sql

问题描述 投票:0回答:2

使用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
sql sql-server
2个回答
2
投票

您可以使用布尔表达式执行此操作。

...
WHERE FLDFNAME = 'XXXX'
      AND FLDLNAME = 'YYYY' 
      AND (FLDDEPT = 'SCIENCE'
            OR FLDREGISTERDATE >= '2019-10-01'
             OR FLDREGISTERDATE IS NULL)
...

1
投票

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'

© www.soinside.com 2019 - 2024. All rights reserved.