2017-02-21 105 views
-2

我是新来SQL查询,我需要帮助下面的逻辑。
我需要将当前系统日期的所有记录与匹配,如果匹配则显示1,如果与基于Client_Code的当前系统日期不匹配,则为零。SQL Server查询帮助4

表:

Client_Code | HolidayDate | Year 
------------+-------------+------ 
Testing | 2/15/2017 | 2017 
Testing | 3/12/2017 | 2017 
Testing | 5/23/2017 | 2017 
Testing | 6/12/2017 | 2017 
Testing | 7/9/2017 | 2017 
Unilever | 1/12/2017 | 2017 
Unilever | 2/17/2017 | 2017 
Unilever | 3/23/2017 | 2017 
Unilever | 2/21/2017 | NULL 

我需要一个像

Client_Code | Status 
------------+---------- 
    Testing | 0 
    Unilever | 1 

输出请帮我解决这个问题。预先感谢您的回复。

+2

系统日期到底是什么意思? – McNets

回答

0

如果存在与GETDATE()匹配的HollidayDate,则应该搜索所有Client_Code;

注意我已经使用GETDATE()作为“系统日期”。

SELECT c.Client_Code, 
      CASE WHEN COALESCE(t.HolidayDate,0) = 0 THEN 0 ELSE 1 END AS Status 
FROM  (SELECT Client_Code 
      FROM  YourTable 
      GROUP BY Client_Code) c 
LEFT JOIN YourTable t 
ON   t.Client_Code = c.Client_Code 
AND  t.HolidayDate = GETDATE(); 

更新

GETDATE()返回一个日期时间值: 'YYYY-MM-DD HH:MM:ss.ttt'

要检查是否DATETIME1 =日期部分的日期部分DATETIME2的使用:

AND DATEADD(DAY, 0, DATEDIFF(DAY, 0, t.HolidayDate)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE())) 

或转换都使用相同的格式为varchar:

AND CONVERT(VARCHAR(20), t.HolidayDate, 112) = CONVERT(VARCHAR(20), GETDATE(), 112) 
+0

您好,感谢您的答复。我修改查询类似如下.. \t SELECT c.Client_Code, \t \t \t CASE WHEN t.HolidayDate = CAST(GETDATE()的日期),则1否则为0结束“状态 \t FROM(SELECT Client_Code \t \t \t FROM表 \t \t \t GROUP BY Client_Code)C \t左JOIN表t \t ON t.Client_Code = c.Client_Code \t AND t.Holida yDate = GETDATE(); 输出: Client_Code \t状态 测试联合利华 我需要输出类似下面 Client_Code \t状态 测试联合利华 我对今天的最新记录。 表: – Kumar

+0

@Kumar我已编辑答案 – McNets