2017-02-21 103 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