2

列変数を使用して 1 つのテーブルを更新しようとしています。例:

Table: BILLING (ORIGIN OF DATA)
Columns: 
- CUSTOMER
- PERIOD
- REVENUE

TABLE: BILLING_MONTHLY
Columns:
- CUSTOMER
- M201301 (this value is REVENUE per year/month)
- M201302 (this value is REVENUE per year/month)
- M201303 (this value is REVENUE per year/month)

BILLING (PERIOD) の値の列で BILLING_MONTHLY を更新する必要がありますが、テーブル BILLING の選択で更新と同等の結果で列を設定できません。

例:

テーブル請求

CUSTOMER    PERIOD  REVENUE
05031       201301  1000
05013       201301  550
05031       201302  800
05032       201303  930
05031       201303  880

期待される結果

テーブル BILLING_MONTHLY

CUSTOMER    M201301         M201302         M201303
05013       550
05031       1000            800             880
05032                                       930

私の考え: 1) BILLING_MONTHLY に顧客を挿入するための "FOR" を作成します。2) 年/月ごとに顧客を評価するための「UPDATE」を作成します。

問題: 列の結果が原因で、機能的に更新を取得できません。

アンケートを作成するには:

CREATE TABLE BILLING
(
 CUSTOMER  VARCHAR2(5 BYTE),
 PERIOD    VARCHAR2(6 BYTE),
 REVENUE   NUMBER
);

INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05031', '201301', 1000);
INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05013', '201301', 550);
INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05031', '201302', 800);
INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05032', '201303', 930);
INSERT INTO BILLING (CUSTOMER, PERIOD, REVENUE) VALUES ('05031', '201303', 880);
COMMIT;

CREATE TABLE BILLING_MONTH
(
  CUSTOMER  VARCHAR2(5 BYTE),
  M201301   NUMBER,
  M201302   NUMBER,
  M201303   NUMBER
);

誰か助けてくれませんか?前もって感謝します!

4

1 に答える 1

0

これはあなたが望むものです

select customer, sum(c1) M201301, sum(c2) M201302, sum(c3) M201303

from(
select customer,
case when period='201301' then revenue else 0 end 'C1',
case when period='201302' then revenue else 0 end 'C2',
case when period='201303' then revenue else 0 end 'C3'
from billing
) t

group by customer

月の範囲と結果の列の名前を自分で制御する必要があります。このクエリがコーディングの一部である場合は、コードに処理させることができます

こちらのsqlfiddle http://sqlfiddle.com/#!2/7aa98/13

于 2013-09-17T18:08:21.340 に答える