0

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 の値を持つ可能性がある場合にこれを行う方法はありますか?

4

1 に答える 1