SQL查询 - 具有多个条件的唯一值

时间:2015-09-07 08:59:37

标签: sql sql-server

我有以下查询,我需要修改它只计算Unit_Serial_No列中唯一值的总和(关于计数我可以用DISTINCT轻松做到这一点),我只是不知道如何处理和。提前谢谢!

 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 个答案:

答案 0 :(得分:1)

试试这个

CSS

答案 1 :(得分: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