2016-07-07 6 views
1

2つの異なる値で発生したどのように多くの時間数:SQLカラムが、私は特定のシナリオのための数を決定しようとしている私は、SQLテーブルを持っている

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

私が知っている必要がありますどのように多くの異なります[ ID]値が存在し、[Status]値も「COMPLETED」でない「FAILED」の値を含みます。基本的に、完了せずに失敗した場合、私はそれのための別の金額が必要です。

例:レコードの3と4が完了したレコードとレコード7はどちらかない持っていない障害が発生しているため、このデータでは

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は同じものなので1と数えます。[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

@Alex Glad私は助けました。答えとして受け入れてください。ありがとう:) – 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

関連する問題