1

次の行があるとします。

VARIABLENAME   YYYYMM   XXXXYY   DATAOBS
variable_1   | 201101 | 111100 | 20
variable_2   | 201101 | 111100 | 20
variable_1   | 201102 | 111100 | 30
variable_2   | 201102 | 111100 | 30
variable_1   | 201101 | 222211 | 20
variable_2   | 201101 | 222211 | 20
variable_1   | 201102 | 222211 | 30
variable_2   | 201102 | 222211 | 30

結果を得る方法を知りたいです:

VARIABLENAME      YYYYMM    XXXXYY   DATAOBS
variables_1and2 | 201101  | 111100 | 40
variables_1and2 | 201102  | 111100 | 60
variables_1and2 | 201101  | 222211 | 40
variables_1and2 | 201102  | 222211 | 60

ここで、それぞれのXXXXYY内のそれぞれのYYYYMM内のvariable_1variable_2を含む行のすべてのDATAOBSが追加され、それぞれのYYYYMMとそれぞれのXXXXYY内の新しい行variables_1and2に配置されます。

知る必要がある場合、私が扱っている実際のデータには数百の異なるYYYYMMとXXXXYYがあります。

前もって感謝します!

4

2 に答える 2

7

あなたが欲しいだけのように聞こえます

SELECT 'variables_1and2' variablename,
       yyyymm,
       xxxxyy,
       sum(dataobs) dataobs
  FROM your_table
 WHERE variablename in ('variable_1', 'variable_2' )
 GROUP BY yyyymm, xxxxyy

これらの行をテーブルに挿入し直す場合は、INSERT

INSERT INTO your_table( variablename, yyyymm, xxxxyy, dataobs )
  SELECT 'variables_1and2' variablename,
         yyyymm,
         xxxxyy,
         sum(dataobs) dataobs
    FROM your_table
   WHERE variablename in ('variable_1', 'variable_2' )
   GROUP BY yyyymm, xxxxyy

もちろん、詳細データと集合体データの両方を同じテーブルに格納することが理にかなっていることは非常に珍しいことです。それは一般的に貧弱なデザインになります。

于 2012-07-12T17:30:39.610 に答える
1

使用しているOracleのバージョンは何ですか?あなたができること(10gで):

select wm_concat(variablename),yyyymm,xxxxyy, sum(dataobs) dataobs
from table
group by yyyymm,xxxxyy

11gリリース2をお持ちの場合は、list_agg(variablename,',')

于 2012-07-12T17:46:15.687 に答える