我有一个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]
答案 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
这是一个有效的例子: