2016-06-20 6 views
0

私はSQLを初めて使用しており、一意の値のカウントを返すクエリを作成しようとしていますが、行がカウントされるかどうかは関連する別の行の値によって決まります。これが「グループ化」または他の機能によって実行できるのかどうかはわかりません。SQL - 複数のキーに基づく値のカウント

私は説明しようとしましょう。データは次のようになります。不確定な数の行があります。わかりやすくするために、各ITEM_NUMBERの2つの値しか示していません。

CUSTOMER_ID ITEM_NUMBER LINE DISPLAY_VALUE 
1   10   1  A 
1   20   1  Y 
1   30   1  C 
1   10   2  B 
1   20   2  X 
1   30   2  C 
2   10   1  B 
2   20   1  X 
2   30   1  D 
2   10   2  A 
2   20   2  Y 
2   30   2  D 

今、私は、対応するLINE/CUSTOMER_IDにITEM_NUMBER 20の値が「X」に等しいときCUSTOMER_IDのための有効ラインを返すようにしたいです。これらは、フィルタリングされた結果の最初のセットになります。

CUSTOMER_ID ITEM_NUMBER LINE DISPLAY_VALUE 
1   10   2  B 
1   20   2  X 
1   30   2  C 
2   10   1  B 
2   20   1  X 
2   30   1  D 

次に、DISPLAY_VALUEとITEM_NUMBERでグループ化する必要があります。 サンプルコード:

SELECT COUNT(*) as 'Count', DISPLAY_VALUE, ITEM_NUMBER 
FROM tmp.DB 
GROUP BY DISPLAY VALUE, ITEM_NUMBER 

理想的には、それは次のように返します:

Count ITEM_NUMBER DISPLAY_VALUE 
2  10    B 
2  20    X 
1  30    C 
1  30    D 

答えて

0

私はこれをテストすることはできませんが、私はあなたが以下のものが必要だと思う:

select count(*),DISPLAY_VALUE,ITEM_NUMBER 
from tmp.DB 
inner join (
    select LINE,CUSTOMER_ID 
    from tmp.DB 
    where DISPLAY_VALUE = 'X' 
    ) x on x.LINE=tmp.DB.LINE and x.CUSTOMER_ID=tmp.DB.CUSTOMER_ID 
group by DISPLAY_VALUE,ITEM_NUMBER 
+0

おかげでフィル!これは魅力的に機能しました。将来の参照のために、結果を制限するために内部結合内のselectを使用するSQL用語がありますか? – Matt

+0

@マット - 私はそのような言葉を知らないが、テクニックは共通のデザインパターンであるため、おそらく1つを持つべきである - そこには、用語をコインにしてwikipediaで何らかの認識を得るためにそこに賛辞があるかもしれない:) –

関連する問題