0

SQLテーブルで

1 列目に 100 の会社名があります。次の 20 列には、2011 年 7 月、....2012 年 7 月などの 20 か月があります (これらの月の列には、すべての企業の数値需要データが含まれています)

会社名、月、需要の 3 つの列のみが必要です。(各企業名は20回繰り返されます)

SQLコードを使用してこれを変換するにはどうすればよいですか??

4

3 に答える 3

0

アンピボット コマンドを使用します。この例では、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'))
于 2013-09-20T20:16:09.557 に答える
0

私の提案は、データベースを正規化することです。少なくとも 2 つのテーブルを作成する必要があります。

company: 
- id
- name

value:
- company_id
- value
- month (numeric)

次に、各値 (「値」テーブル内) を対応する会社および対応する月に関連付けることができます。

于 2013-09-20T19:57:46.217 に答える