2017-02-28 138 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将被计数两次。我不确定你是否需要这个。这里需要更多的说明。