MS-SQL分组和计数查询

时间:2017-01-10 09:29:46

标签: sql sql-server grouping

所以我有一个表,列是Product和ProductGroupID。 每个产品可以包含一个或多个组,如下例所示:

+-------+--------------+
|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!

1 个答案:

答案 0 :(得分: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 |
+---------+----------------------+