首页 > Linux操作系统 > Linux操作系统 > decode实现行转列的查询
--是这样一个问题,数据库中的字段有 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博客 ” ,链接:https://blog.itpub.net/28803801/viewspace-773999/ ,如需转载,请注明出处,否则将追究法律责任。