题目如下:已知表tab:
T1 F1 F2 F3
A 1 甲类支出 1000
A 2 已类支出 2000
A 3 丙类支出 3000
B 1 甲类支出 4000
B 3 丙类支出 2000
写sql语句得到的结果如下表:T1 甲类支出 乙类支出 丙类支出
A 1000 2000 3000
B 4000 0 2000高人帮忙指点下
T1 F1 F2 F3
A 1 甲类支出 1000
A 2 已类支出 2000
A 3 丙类支出 3000
B 1 甲类支出 4000
B 3 丙类支出 2000
写sql语句得到的结果如下表:T1 甲类支出 乙类支出 丙类支出
A 1000 2000 3000
B 4000 0 2000高人帮忙指点下
sum(decode(F2),'甲类支出',F3) 甲类支出,
sum(decode(F2),'乙类支出',F3) 乙类支出,
sum(decode(F2),'丙类支出',F3) 丙类支出
from tab
group by T1;
nvl(sum(decode(F1,1,F3,0)),0) 甲类支出,
nvl(sum(decode(F1,2,F3,0)),0) 乙类支出,
nvl(sum(decode(F1,3,F3,0)),0) 丙类支出
from tab
group by T1;
sum(decode(F2,'甲类支出',F3)) 甲类支出,
sum(decode(F2,'乙类支出',F3)) 乙类支出,
sum(decode(F2,'丙类支出',F3)) 丙类支出
from tab
group by T1;
上面)位置放错了,应该是这个,呵呵。
如果项目数据固定(如这儿的甲、乙、丙类支出),使用普通SQL就行了,
如果项目数据不固定,则需要用PL/SQL动态拼接了
另外也可以使用case函数替代decode来实现
这种贴子很多,参考
http://topic.csdn.net/u/20100322/16/102d4dfd-4185-459b-b74f-19bf33053285.html
(
select 'A' T1,1 f1,'甲类支出' F2,1000 F3 from dual
union all
select 'A' T1,2 f1,'已类支出' F2,2000 F3 from dual
union all
select 'A' T1,3 f1,'丙类支出' F2,3000 F3 from dual
union all
select 'B' T1,1 f1,'甲类支出' F2,4000 F3 from dual
union all
select 'B' T1,3 f1,'丙类支出' F2,2000 F3 from dual
)
select t1,
sum(case when f1 = 1 then f3 else null end) "甲类支出",
sum(case when f1 = 2 then f3 else null end) "已类支出",
sum(case when f1 = 3 then f3 else null end) "丙类支出"
from t1
group by "T1"