2017-02-28 152 views
0

我試圖找到2個類別存在的事務計數。Sql Server - 在Aggregate IN子句中加入

我有3類:椅子,桌子,茶杯

這成爲使用CROSS JOIN 9個組合(忽略受騙者並序):

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

下有交易編號和類別的表中行級別:

Trans_id Type 
123   Table 
123   Cup 
234   Chair 
345   Cup 
345   Table 

我試圖讓這樣的表顯示2類別和不同交易的計數與兩個類別目前:

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 

我想我可以做這樣的事情:

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) 

但沒有任何運氣 - 有什麼建議?

回答

2

您需要爲item1和trade2兩次加入交易表一次。之後的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 

t1在此查詢是事務表,t2是具有項目的組合之一。

該查詢產生像(表,椅子),(椅子,桌子)等對稱對,每個事務ID將被計數兩次。我不確定你是否需要這個。這裏需要更多的說明。