SQLテーブルで
1 列目に 100 の会社名があります。次の 20 列には、2011 年 7 月、....2012 年 7 月などの 20 か月があります (これらの月の列には、すべての企業の数値需要データが含まれています)
会社名、月、需要の 3 つの列のみが必要です。(各企業名は20回繰り返されます)
SQLコードを使用してこれを変換するにはどうすればよいですか??
アンピボット コマンドを使用します。この例では、1 つの行を取り、それを 2 つの行に変換します。
次の例では、2 つの行を取り、それを 4 つに変換します。
WITH xset
AS (SELECT 'Expedition' ford
, 'Corvette' gm
, DATE '2013-01-01' ford_raise
, DATE '2013-09-03' gm_raise
, 1 seq
FROM DUAL
UNION ALL
SELECT 'Fusion'
, 'Escalate'
, DATE '2010-07-04'
, DATE '2001-12-31'
, 2
FROM DUAL)
SELECT *
FROM xset UNPIVOT ((event_date, model) FOR event IN ((ford_raise, ford) AS 'Ford Raise', (gm_raise, gm) AS 'GM Raise'))
私の提案は、データベースを正規化することです。少なくとも 2 つのテーブルを作成する必要があります。
company:
- id
- name
value:
- company_id
- value
- month (numeric)
次に、各値 (「値」テーブル内) を対応する会社および対応する月に関連付けることができます。