2017-01-10 17 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

読むようになります。 //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 

今、自己が条件

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 

にグループIDに参加しないと結果が助けをhttpを求める前に、

+---------+----------------------+ 
| PRODUCT | Linked_GroupProducts | 
+---------+----------------------+ 
|  10 |     5 | 
|  20 |     2 | 
|  30 |     2 | 
|  40 |     1 | 
|  50 |     3 | 
|  60 |     2 | 
|  70 |     2 | 
|  80 |     2 | 
|  90 |     2 | 
|  100 |     1 | 
+---------+----------------------+ 
関連する問題