SQL - 使用两个不同的值计算出现的列数

时间:2016-07-07 00:43:05

标签: sql

我有一个SQL表,我正在尝试确定特定方案的计数:

Table [References]:
[County], [Vendor], [Status], [ID]

我需要知道有多少个不同的[ID]值包含[Status]值为“FAILED”且不具有[Status]“COMPLETED”的[Status]值。基本上,如果没有完成失败,我需要不同的金额。

示例:

County_1, Vendor_1, Failed, 12345.12
County_1, Vendor_1, Completed, 12345.12
County_1, Vendor_1, Failed, 12345.32
County_1, Vendor_1, Failed, 12345.32
County_1, Vendor_1, Failed, 12345.52
County_1, Vendor_1, Completed, 12345.52
County_1, Vendor_1, Failed, 12345.72

对于这些数据,它应该返回2的计数,因为记录3和4是没有完成记录的故障而记录7也没有。它将是一个独特的计数,因此3和4将计为1,因为它们是相同的[ID]

2 个答案:

答案 0 :(得分:1)

您可以使用子查询。首先提取具有“失败”状态的所有不同ID,然后过滤具有已完成状态的ID。请看下面的内容:

SELECT COUNT(DISTINCT ID) 
FROM References 
WHERE ID NOT IN (
    SELECT DISTINCT ID 
    FROM References
    WHERE STATUS = 'COMPLETED'
)
AND STATUS ='FAILED'

答案 1 :(得分:0)

以下是使用conditional aggregation的一个选项:

select count(*)
from (
  select id
  from refernce
  group by county, vendor, id
  having max(case when status = 'Failed' then 1 else 0 end) != 
         max(case when status = 'Completed' then 1 else 0 end)
  ) t

这是一个有效的例子: