2016-07-07 87 views
1

我有一個SQL表,我試圖確定的計數爲特定方案多少時間出現:SQL - 數列與兩個不同的值

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

我需要知道有多少不同的[ ID]值存在,其中包含[Status]值爲「FAILED」的[狀態]不包含「COMPLETED」。基本上,如果沒有完成的失敗,我需要明確的金額。

例子:

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是沒有一個完整的記錄,並創紀錄的700沒有任何故障。這將是一個不同的計數,所以3和4會算作一個,因爲它們是相同的[ID]

+1

你有沒有嘗試的SQL查詢? – Parfait

回答

1

您可以使用子查詢。首先提取「失敗」狀態的所有不同ID,然後過濾具有完整狀態的ID。請參見下文:

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

謝謝,這正是我一直在尋找的! – Alex

+0

@亞歷克斯很高興我幫了忙。請接受答案。謝謝:) – TheProvost

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 

這裏有一個工作示例:

+1

這個答案對我來說是正確的。我無法理解它爲什麼會被低估。 (儘管我更喜歡'<>';)。 –

+0

你不能按縣分組。如果您檢查數據2 ID可以具有相同的縣價值。他想要明確ID的數量 – TheProvost