我尝试使用列变量更新一个表。 例如:
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的选择中,我没有在更新中获得set column。
示例:
表格支付
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
);
有人可以帮帮我吗? 提前谢谢!
答案 0 :(得分: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 here http://sqlfiddle.com/#!2/7aa98/13