ホームページ  >  記事  >  データベース  >  Oracleは列を複数の列に変換します

Oracleは列を複数の列に変換します

WBOY
WBOYオリジナル
2023-05-13 16:17:381086ブラウズ

1 つのデータ列を複数のデータ列に変換することは、Oracle の一般的な要件です。たとえば、製品、販売日、販売数量を含むテーブルがあるとします。これを各製品の月次売上に換算したいとします。この目標を達成する最も簡単な方法は、PIVOT 操作を使用することです。

次はサンプル テーブルです:

PRODUCT   SALE_DATE   SALE_QUANTITY
-------------------------------------
A         2021-01-01  100
A         2021-01-15  200
A         2021-02-01  300
B         2021-01-01  150
B         2021-03-01  250

これを次の形式に変換します:

PRODUCT   JAN_SALE  FEB_SALE  MAR_SALE
-------------------------------------
A         300       300       0
B         150       0         250

PIVOT を使用してこの操作を実装します。次の SQL を使用できます。 :

SELECT PRODUCT, 
       NVL(JAN_SALE, 0) AS JAN_SALE,
       NVL(FEB_SALE, 0) AS FEB_SALE,
       NVL(MAR_SALE, 0) AS MAR_SALE
FROM 
  (SELECT PRODUCT, 
          TO_CHAR(SALE_DATE, 'MON') AS SALE_MONTH, 
          SALE_QUANTITY
   FROM   SALES_TABLE)
PIVOT 
  (SUM(SALE_QUANTITY)
   FOR SALE_MONTH IN ('JAN' AS JAN_SALE, 'FEB' AS FEB_SALE, 'MAR' AS MAR_SALE))

上記の SQL では、まず元のテーブルを MONTH 列を含む中間結果に変換します。 TO_CHAR 関数を使用して、SALE_DATE を短い月の文字列に変換しました。次に、PIVOT 演算子を使用して、各月の販売数量を列に変換します。 PIVOT の構文は非常に簡潔で、変換する列と値、および新しい列の名前を指定するだけです。

上記の例では、NVL 関数を使用して、月に売上がない場合でも、結果にすべての製品が含まれるようにしました。 NVL 関数を使用しない場合、クエリ結果には製品と売上のある月のみが表示されます。

PIVOT 操作は、列を複数の列に変換するのに適しているだけでなく、同様の構文を使用して行を複数の行に変換することもできます。たとえば、地域、製品、販売数量を含むテーブルがあるとします。これを製品および地域ごとの総売上高に変換したいと考えています。 PIVOT 操作を使用すると、この目標を簡単に達成できます。

つまり、PIVOT 操作は、Oracle SQL の非常に便利でシンプルなツールであり、列を複数の列に、または行を複数の行にすばやく変換できます。その柔軟性とカスタマイズ可能な性質により、多くの状況で役立ちます。

以上がOracleは列を複数の列に変換しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。