2015-09-07 337 views
1

我有以下查詢,我需要修改它只計算Unit_Serial_No列中的唯一值的總和(在DISTINCT中我可以很容易地做到這一點),我只是不知道如何處理SUM。提前致謝!SQL查詢 - 具有多個條件的唯一值

SELECT COUNT(Test_Result) as 'Total' 
    ,SUM(CASE WHEN Test_Result='Pass' THEN 1 END) AS 'Passed' 
    ,SUM(CASE WHEN Test_Result='Fail' THEN 1 END) AS 'Failed' 
FROM [Optima_Test_Results].[dbo].[Optima PreChamber Test] 
WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, Created_Date)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 

解決方案,很少有調整,信貸Madhivanan:

SELECT COUNT(DISTINCT Unit_Serial_No) as 'Total' 
    ,COUNT(DISTINCT CASE WHEN Test_Result='Pass' THEN Unit_Serial_No END) AS 'Passed' 
    ,COUNT(DISTINCT CASE WHEN Test_Result='Fail' THEN Unit_Serial_No END) AS 'Failed' 
FROM [Optima_Test_Results].[dbo].[Optima PreChamber Test] 
WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, Created_Date)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 
+2

你想得到'Unit_Serial_No'的'Sum'還是'Count'?這聽起來是這個列是用於你通常不會求和的序列號。 –

+0

計算今天的所有唯一序列號,並返回2個數字,其中一個總和爲失敗的一個總和。 – Steven

回答

1

試試這個

SELECT COUNT(DISTINCT Test_Result) as 'Total' 
    ,COUNT(DISTINCT CASE WHEN Test_Result='Pass' THEN serial_no END) AS 'Passed' 
    ,COUNT(DISTINCT CASE WHEN Test_Result='Fail' THEN serial_no END) AS 'Failed' 
FROM [Optima_Test_Results].[dbo].[Optima PreChamber Test] 
WHERE 
DATEADD(dd, 0, DATEDIFF(dd, 0, Created_Date)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 
+1

謝謝!用一個小小的mod,它正是我期待的:)我在問題中發佈了正確的查詢。 – Steven

0

這種查詢可以幫助,如果你不具備相同的測試不同的結果。否則,它們將被計數兩次:一次爲'通過',一次爲'失敗':

;WITH uniquevalues AS 
(
    SELECT DISTINCT Unit_Serial_No, Test_Result 
    FROM [Optima_Test_Results].[dbo].[Optima PreChamber Test] 
    WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, Created_Date)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 
) 
SELECT COUNT(Test_Result) as 'Total' 
    ,SUM(CASE WHEN Test_Result='Pass' THEN 1 END) AS 'Passed' 
    ,SUM(CASE WHEN Test_Result='Fail' THEN 1 END) AS 'Failed' 
FROM uniquevalues