2017-01-10 65 views
-4

所以我有一个表,列是Product和ProductGroupID。 每个产品都可以在1个或多个组,如图所示:MS-SQL分组和计数查询

+-------+--------------+ 
|product|ProductGroupId| 
+-------+--------------+ 
| 10 | 2   | 
| 10 | 9   | 
| 10 | 4   | 
| 10 | 7   | 
| 20 | 7   | 
| 30 | 4   | 
| 40 | 1   | 
| 50 | 11   | 
| 50 | 12   | 
| 60 | 2   | 
| 70 | 9   | 
| 80 | 11   | 
| 90 | 12   | 
| 100 | 13   | 
+-------+--------------+ 

对于每一个产品,我需要得到它的组,然后把它们在这些群体的产品的数量。 例如,产品10属于2,4,9,7组,因此我需要计算所有在这些组中的产品,在这种情况下为5(产品数量为10,60,70,30,20)。 我附上了这个例子的完整预期结果。 https://i.stack.imgur.com/XTa4R.png 任何建议如何在MS-SQL中做到这一点?

Thnaks!

+3

阅读求助HTTP之前: //stackoverflow.com/help/how-to-ask提供示例数据和您想要的输出。 –

+1

我不明白你想做什么。我审查你的样本图像,但它根本没有意义。现在基于您的问题,您希望统计组中的所有产品。那么'案例5(产品数量10,60,70,30,20)'是什么? –

回答

3

如果我理解正确,这将适用于你。从图像中

模式:

CREATE TABLE #PRODUCTS (PRODUCT INT, PRODUCTGROUP_ID INT) 

INSERT INTO #PRODUCTS 
SELECT 10,2 
UNION ALL 
SELECT 10,9 
UNION ALL 
SELECT 10,4 
UNION ALL 
SELECT 10,7 
UNION ALL 
SELECT 20,7 
UNION ALL 
SELECT 30,4 
UNION ALL 
SELECT 40,1 
UNION ALL 
SELECT 50,11 
UNION ALL 
SELECT 50,12 
UNION ALL 
SELECT 60,2 
UNION ALL 
SELECT 70,9 
UNION ALL 
SELECT 80,11 
UNION ALL 
SELECT 90,12 
UNION ALL 
SELECT 100,13 

现在做一个自我加入与GroupId的条件

SELECT P.PRODUCT, COUNT(DISTINCT G.PRODUCT) Linked_GroupProducts 
FROM #PRODUCTS P 
INNER JOIN #PRODUCTS G ON P.PRODUCTGROUP_ID = G.PRODUCTGROUP_ID 
GROUP BY P.PRODUCT 

而其结果将是

+---------+----------------------+ 
| PRODUCT | Linked_GroupProducts | 
+---------+----------------------+ 
|  10 |     5 | 
|  20 |     2 | 
|  30 |     2 | 
|  40 |     1 | 
|  50 |     3 | 
|  60 |     2 | 
|  70 |     2 | 
|  80 |     2 | 
|  90 |     2 | 
|  100 |     1 | 
+---------+----------------------+