最初に、さまざまな色の製品の売上を記録する「ORDERS」という名前のテーブルを作成します。
ORDER_ID PRODUCT_COLOR SALE_AMOUNT
-------------------------------------
1 Red 100
2 Blue 200
3 Green 300
4 Red 400
5 Blue 500
PIVOTキーワード: PIVOTキーワードを使用して、テーブル内の行を列に変換します。これは、最も一般的に使用される行から列への方法です。
SELECT *
FROM
(SELECT PRODUCT_COLOR, SALE_AMOUNT
FROM ORDERS)
PIVOT
(SUM(SALE_AMOUNT) FOR PRODUCT_COLOR IN ('Red' AS Red, 'Blue' AS Blue, 'Green' AS Green))
DECODE関数: DECODE関数を使用して行から列への変換を実装しますが、実装がより複雑になる場合があります。
SELECT PRODUCT_COLOR,
SUM(DECODE(PRODUCT_COLOR, 'Red', SALE_AMOUNT, 0)) AS Red,
SUM(DECODE(PRODUCT_COLOR, 'Blue', SALE_AMOUNT, 0)) AS Blue,
SUM(DECODE(PRODUCT_COLOR, 'Green', SALE_AMOUNT, 0)) AS Green
FROM ORDERS
GROUP BY PRODUCT_COLOR
この例では、 DECODE関数を使用して各行の商品の色を判断し、色が「赤」の場合は「赤」の列に売上を追加し、色が「青」の場合は「赤」の列に売上を追加します。売り上げは「青」の列に追加されます。
UNION ALL句: UNION ALL句とサブクエリを使用して行から列への変換を実装しますが、この方法は実装に多くの手順が必要であり、便利ではありません。
UNION ALL関数を使用して、複数行のデータを 1 行のデータに結合します。
GROUP BY句を使用して、さまざまな売上をカウントします。
SELECT PRODUCT_COLOR, SUM(SALE_AMOUNT) AS SALE_AMOUNT
FROM
(
SELECT 'Red' AS PRODUCT_COLOR, SALE_AMOUNT FROM ORDERS WHERE PRODUCT_COLOR = 'Red'
UNION ALL
SELECT 'Blue' AS PRODUCT_COLOR, SALE_AMOUNT FROM ORDERS WHERE PRODUCT_COLOR = 'Blue'
UNION ALL
SELECT 'Green' AS PRODUCT_COLOR, SALE_AMOUNT FROM ORDERS WHERE PRODUCT_COLOR = 'Green'
)
GROUP BY PRODUCT_COLOR
このテーブルの各行は、色の売上を記録します。次に、UNION ALL関数を使用して、複数行のデータを 1 行のデータに結合します。