2017-02-28 12 views
0

2つのカテゴリが存在するトランザクションの数を調べようとしています。Sql Server - 集約IN句に参加

私は3つのカテゴリーがあります:トランザクションIDのテーブルとカテゴリではあります

Item_1 Item_2 
Table Table 
Table Chair 
Table Cup 
Chair Chair 
Chair Table 
Chair Cup 
Cup  Cup 
Cup  Chair 
Cup  Table 

次へ:9つの組み合わせ(無視dupesと順)、JOIN CROSSを使用してなった椅子、テーブル、カップ

を行レベル:

このような2つのカテゴリと、両方のカテゴリの異なるトランザクションの数を示すこのような表を取得しようとしています。- 任意の提案

select item1, item2, count(distinct(trans_id)) 
from t1 
join t2 
    on t1.item1 IN (SELECT type FROM t2 group by trans_id) 
    and t1.item2 IN (SELECT type FROM t2 group by trans_id) 

が、任意の運を持っていない:

Item_1 Item_2 Count 
Table Table 578 
Table Chair 826 
Table Cup  370 
Chair Chair 235 
Chair Table 736 
Chair Cup  662 
Cup  Cup  306 
Cup  Chair 262 
Cup  Table 839 
は、私は私のような何かをすることができるだろうと思いましたか?

答えて

2

item1のトランザクションテーブルを2回、item2のトランザクションテーブルを1回ずつ登録する必要があります。その後、group byがカウントを取得します。このクエリで

select t2.item1, t2.item2, count(distinct t11.trans_id) 
from t2 
join t1 t11 on t2.item1 = t11.type 
join t1 t12 on t2.item2 = t12.type 
where t11.trans_id=t12.trans_id 
group by t2.item1, t2.item2 

t1t2は、アイテムの組み合わせを有するものである、トランザクションテーブルです。

このクエリは、(テーブル、チェア)、(チェア、テーブル)などの対称ペアを生成し、各組み合わせは各トランザクションIDに対して2回カウントされます。あなたがそれを必要とするかどうかはわかりません。ここではもっと明確な説明が必要です。