SQL で列をピボットするのに問題があります。上位 6 つの結果を 1 つの列から行にピボットしたいと思います。ピボットしている列には、最初は 6 つ未満または 6 つを超える結果が含まれる可能性がありますが、上位 6 つを超える結果は無視したいと考えています。
私の Table1 は次のようになります。
ID | GroupID | CodeNum
----------------------
1 | 1 | 111
2 | 1 | 222
3 | 1 | 333
4 | 1 | 444
5 | 1 | 555
6 | 1 | 666
7 | 1 | 777
8 | 2 | 111
9 | 2 | 888
10 | 3 | 999
出力を次のようにします。
GroupID | Code1 | Code2 | Code3 | Code4 | Code5 | Code6
-------------------------------------------------------
1 | 111 | 222 | 333 | 444 | 555 | 666
2 | 111 | 888 | | | |
3 | 999 | | | | |
私はこのコードを試しました:
SELECT GroupID
, [Code1] = CASE WHEN rn = 1 THEN CodeNum END
, [Code2] = CASE WHEN rn = 2 THEN CodeNum END
, [Code3] = CASE WHEN rn = 3 THEN CodeNum END
, [Code4] = CASE WHEN rn = 4 THEN CodeNum END
, [Code5] = CASE WHEN rn = 5 THEN CodeNum END
, [Code6] = CASE WHEN rn = 6 THEN CodeNum END
FROM (
SELECT TOP 6 GroupID
, rn = ROW_NUMBER() OVER (ORDER BY ID)
, CodeNum
FROM Table1
) q
GROUP BY
GroupID
しかし、次のようなエラーが表示されますColumn 'q.rn' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
CodeNum が GroupID ごとに 1 ~ 12 の値を持つ可能性がある場合にこれを行う方法はありますか?