2017-01-10 6 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 | 
+---------+----------------------+