オラクル、行から列への変換と統計を実現できるいくつかの書き込み方法があります

最初に、さまざまな色の製品の売上を記録する「ORDERS」という名前のテーブルを作成します。

ORDER_ID  PRODUCT_COLOR  SALE_AMOUNT
-------------------------------------
1         Red            100
2         Blue           200
3         Green          300
4         Red            400
5         Blue           500
  1. 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))
  1. 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関数を使用して各行の商品の色を判断し、色が「赤」の場合は「赤」の列に売上を追加し、色が「青」の場合は「赤」の列に売上を追加します。売り上げは「青」の列に追加されます。

  1. 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 行のデータに結合します。

おすすめ

転載: blog.csdn.net/jackwu11/article/details/128993987