我有一个Order
表,如下所示:
ORDER_ID PRODUCT_ID
1 1230
1 1231
1 1232
2 1231
2 2000
3 1230
3 3567
和Product
表:
PRODUCT_ID NAME
1230 A
1231 B
1232 C
我的第一个问题,如何获得2个产品表的组合,那么我的新表结构应该如何?
例如;
{1230,1231}, {1230,1232}, {1231,1232}
但我不想这个{1231,1230}
,因为它已经添加了。
第二个,在Order
表中,我保持产品销售一个会话。我的新桌怎么样?
实例;
orderid products
1 {1230,1231,1232}
最后,我想找到其他一起销售的产品支持价值,
exp: {1231,1230} count : 2
{1230,1232 count : 0 }
提前感谢。
编辑:我想这样做:http://webdocs.cs.ualberta.ca/~zaiane/courses/cmput499/slides/Lect10/sld054.htm
答案 0 :(得分:2)
如果我已正确解释您的要求?
;WITH T(P1, P2, ORDER_ID)
AS (SELECT p1.PRODUCT_ID,
p2.PRODUCT_ID,
O.ORDER_ID
FROM Product p1
JOIN Product p2
ON p1.PRODUCT_ID < p2.PRODUCT_ID
JOIN [ORDER] o
ON o.PRODUCT_ID IN ( p1.PRODUCT_ID, p2.PRODUCT_ID )
GROUP BY p1.PRODUCT_ID,
p2.PRODUCT_ID,
O.ORDER_ID
HAVING COUNT(*) = 2)
SELECT P1,
P2,
COUNT(*) AS Cnt
FROM T
GROUP BY P1,
P2
答案 1 :(得分:0)
我真的不明白问题2或3,所以请在你的问题中澄清。
第一个很棘手,但我认为你正在寻找这样的东西:
SELECT * FROM products p1, products p2 GROUP BY ((p1.PRODUCT_ID*p2.PRODUCT_ID)+p1.PRODUCT_ID+p2.PRODUCT_ID)
因为它只按行分组,只有两个数字相同,而不关心顺序。可能有一种更优雅的方式来创建基本上是该组合的唯一ID,但我想不出任何。