0

私がやろうとしているこの1つのクエリに対して、SQL Developerでピボット関数を使用する方法を理解しようとしています。以前の投稿から本当に役立つものは何も見つからなかったので、誰かが私を助けてくれることを望んでいました.

現在選択する必要があるデータの小さなセクションは次のようになります。

| ID | NAME | COUNTRY | STATE | DATE |  TYPE  | AMOUNT |
+----+------+---------+-------+------+--------+--------+
|  1 | John | U.S.    | TX    |  345 | Red    |     76 |
|  1 | John | U.S.    | TX    |  345 | Blue   |    357 |
|  2 | Alex | U.S.    | CO    |  654 | Red    |    231 |
|  2 | Alex | U.S.    | CO    |  654 | Black  |     90 |
|  2 | Alex | U.S.    | CO    |  654 | Blue   |    123 |
|  2 | Alex | U.S.    | CO    |  654 | Red    |    456 |
|  1 | John | U.S.    | TX    |  345 | Gold   |     60 |
|  1 | John | U.S.    | TX    |  345 | Silver |     70 |

上記が次のようになるように、それぞれ異なるタイプを独自の列として持つ必要があります。

| ID | NAME | COUNTRY | STATE | DATE | RED | BLUE | BLACK  | OTHER  |
+----+------+---------+-------+------+-----+------+--------+--------+
|  1 | John | U.S.    | TX    |  345 |  76 |  357 | (null) | 130    |
|  2 | Alex | U.S.    | CO    |  654 | 687 |  123 | 90     | (null) |

私のデータでは、「その他」の色がいくつあるか、またはそれらがすべて何であるかはわかりません (ただし、それらの数は間違いなく有限です)。

誰かがこれで私に提供できる助けに感謝します。

4

2 に答える 2

5

私は怠け者で、CASE式を使用してこれを行う 1 つの方法を示します。

SELECT  ID,
        NAME,
        COUNTRY,
        STATE,
        DATE,
        SUM(CASE WHEN TYPE = 'Red' THEN AMOUNT END) RED,
        SUM(CASE WHEN TYPE = 'Blue' THEN AMOUNT END) BLUE,
        SUM(CASE WHEN TYPE = 'Black' THEN AMOUNT END) Black,
        SUM(CASE WHEN TYPE NOT IN ('Red','Blue','Black') THEN AMOUNT END) OTHER
FROM YourTable
GROUP BY ID,
         NAME,
         COUNTRY,
         STATE,
         DATE

RDBMSを指定すると、これを行うさまざまな方法で、はるかに完全な回答が少なくとも1つあると確信しています。

于 2013-05-09T15:37:16.230 に答える