如何检查值是否存在?

时间:2018-02-02 09:54:21

标签: sql sql-server

我们有一个表(销售计划表单MDS),如

> 20171201 2017 12 2.155.125 ...some other values 
> 20171101 2017 11 2.155.125 ...some other values

我想查看当月的记录(比如2018/01)。

我试过了:

IF EXISTS
    (
        SELECT
            spc.DateID
        FROM
            dim.SalesPlanCountry spc
            JOIN dim.Calendar cal ON spc.DateID = cal.DateID
        WHERE
            cal.CalendarYear = @Year
            AND cal.MonthOfYear = @Month
    ) THEN 
        SELECT 'OK'
    ELSE SELECT 'Missing'

返回

  

关键字'THEN'附近的语法不正确。

帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

就像我说你不需要THEN关键字一样,只需使用SELECT <values>或使用CASE WHEN语句(参见 phoniq 回答)

IF EXISTS (
    SELECT
        spc.DateID
    FROM dim.SalesPlanCountry spc
    JOIN dim.Calendar cal
        ON spc.DateID = cal.DateID
    WHERE cal.CalendarYear = @Year
        AND cal.MonthOfYear = @Month
)
SELECT 'OK'
ELSE 
SELECT 'Missing'

答案 1 :(得分:0)

SELECT CASE WHEN spc.DateID = NULL THEN 'OK' ELSE 'Missing' END
FROM
  dim.SalesPlanCountry spc
  JOIN dim.Calendar cal ON spc.DateID = cal.DateID
WHERE
  cal.CalendarYear = @Year
  AND cal.MonthOfYear = @Month

答案 2 :(得分:0)

这不能简化为......

SELECT CASE COUNT(*) WHEN 0 THEN 'Missing' ELSE 'OK' END
FROM dim.SalesPlanCountry spc
     JOIN dim.Calendar cal ON spc.DateID = cal.DateID
WHERE cal.CalendarYear = @Year
  AND cal.MonthOfYear = @Month;

无需EXISTS。在执行COUNT数据集时,即使数据集没有返回任何行,也会始终返回一个值。