2

我试图用列变量更新一个表。例子:

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)创建“FOR”以在 BILLING_MONTHLY 中插入客户;2) 每年/每月为客户增值创建“更新”;

问题:我没有在功能上获得更新,因为结果是列。

要创建调查:

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 回答