Sql Server - 加入Aggregate IN子句

时间:2017-02-28 23:58:44

标签: sql sql-server join

我正在尝试查找存在两个类别的交易计数。

我有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

接下来是行级别的交易ID和类别表:

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

我正试图找到一个这样的表格,显示两个类别和两个类别的不同交易的数量:

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)

但没有运气 - 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您需要为item1两次加入事务表,为item2加入一次。此后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是包含项目组合的表。

此查询生成对称对,如(table,chair),(chair,table),每个事务ID将对每个组合计数两次。我不确定你是否需要那个。需要更多澄清。