decode實現行轉列的查詢

lihy114發表於2013-10-09

--是這樣一個問題,資料庫中的欄位有  year, month, supermarkname,salesNumber.四個欄位。如何編寫SQL語句使得查詢出來的結果如下

year   supermarkName   1月   2月    3月    4月     5月     。。。    (列名)
2012     超市1              500   300   200   100    200     。。。    (查詢出的結果)

drop table sales;

create table sales
(
year char(4),
supermarkname varchar2(20),
month varchar2(10),
salesnumber number(5)
)
/

insert into sales values('2012','超市1','1月',500);
insert into sales values('2012','超市1','2月',300);
insert into sales values('2012','超市1','3月',200);
insert into sales values('2012','超市1','4月',100);
insert into sales values('2012','超市1','5月',200);
insert into sales values('2012','超市1','6月',600);
insert into sales values('2012','超市2','1月',500);
insert into sales values('2012','超市2','2月',300);
insert into sales values('2012','超市2','3月',200);
insert into sales values('2012','超市2','4月',100);
insert into sales values('2012','超市2','5月',200);
insert into sales values('2012','超市2','6月',600);
insert into sales values('2013','超市1','1月',500);
insert into sales values('2013','超市1','2月',300);
insert into sales values('2013','超市1','3月',200);
insert into sales values('2013','超市1','4月',100);
insert into sales values('2013','超市1','5月',200);
insert into sales values('2013','超市1','6月',600);

commit;


--decode查詢語句,實現行轉列
select YEAR,SUPERMARKNAME,
sum(decode(month,'1月',salesnumber,0)) "1月",
sum(decode(month,'2月',salesnumber,0)) "2月",
sum(decode(month,'3月',salesnumber,0)) "3月",
sum(decode(month,'4月',salesnumber,0)) "4月",
sum(decode(month,'5月',salesnumber,0)) "5月",
sum(decode(month,'6月',salesnumber,0)) "6月",
sum(decode(month,'7月',salesnumber,0)) "7月",
sum(decode(month,'8月',salesnumber,0)) "8月",
sum(decode(month,'9月',salesnumber,0)) "9月",
sum(decode(month,'10月',salesnumber,0)) "10月",
sum(decode(month,'11月',salesnumber,0)) "11月",
sum(decode(month,'12月',salesnumber,0)) "12月"
from sales group by YEAR,SUPERMARKNAME;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28803801/viewspace-773999/,如需轉載,請註明出處,否則將追究法律責任。

相關文章