分類 製品
01 01
01 02
01 03
上記のような一つの分類に対し、
複数の製品を持ったデータが存在
する場合に
一発のSQLを使用して
データを横もち状態にする方法を
ご教授願えますか?
(結果イメージ)
分類1 製品1 製品2 製品3
01 01 02 03
----------------------------------------------------
もし分類毎の製品の数に上限があって、なおかつ分類と製品の組み合わせに
関して重複レコードが存在しないのであれば、こんな感じでできると思います。
SELECT
[分類],
MAX(CASE WHEN [ID] = 1 THEN [製品] ELSE NULL END) AS [製品1],
MAX(CASE WHEN [ID] = 2 THEN [製品] ELSE NULL END) AS [製品2],
MAX(CASE WHEN [ID] = 3 THEN [製品] ELSE NULL END) AS [製品3]
FROM (
SELECT COUNT(*) AS [ID], T1.[分類], T1.[製品] FROM [TABLE] AS T1
INNER JOIN [TABLE] AS T2
ON T1.[分類] = T2.[分類] AND T1.[製品] >= T2.[製品]
GROUP BY T1.[分類], T1.[製品]
) AS T3
GROUP BY [分類]
01 01
01 02
01 03
上記のような一つの分類に対し、
複数の製品を持ったデータが存在
する場合に
一発のSQLを使用して
データを横もち状態にする方法を
ご教授願えますか?
(結果イメージ)
分類1 製品1 製品2 製品3
01 01 02 03
----------------------------------------------------
もし分類毎の製品の数に上限があって、なおかつ分類と製品の組み合わせに
関して重複レコードが存在しないのであれば、こんな感じでできると思います。
SELECT
[分類],
MAX(CASE WHEN [ID] = 1 THEN [製品] ELSE NULL END) AS [製品1],
MAX(CASE WHEN [ID] = 2 THEN [製品] ELSE NULL END) AS [製品2],
MAX(CASE WHEN [ID] = 3 THEN [製品] ELSE NULL END) AS [製品3]
FROM (
SELECT COUNT(*) AS [ID], T1.[分類], T1.[製品] FROM [TABLE] AS T1
INNER JOIN [TABLE] AS T2
ON T1.[分類] = T2.[分類] AND T1.[製品] >= T2.[製品]
GROUP BY T1.[分類], T1.[製品]
) AS T3
GROUP BY [分類]