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