欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

sql查询解决思路

更新时间: 2014-01-05 02:11:47 责任编辑: Author_N1

 

SQL查询
数据库中表设计为
TB1
TYPE,LEV,NUM,YEAR
1   , 5 ,100,2010
  1 , 6 ,101,2010
  2 , 7 ,200,2010
  2 , 7 ,201,2011
  3 , 5 ,300,2012
  3 , 5 ,320,2012
..
要得到这样的数据列表
lev/year  2010 2011 2012
   5       100  0   620
   6       101  0    0
   7       200  201  0
--参考方法--
引用:
数据库中表设计为
TB1
TYPE,LEV,NUM,YEAR
1   , 5 ,100,2010
  1 , 6 ,101,2010
  2 , 7 ,200,2010
  2 , 7 ,201,2011
  3 , 5 ,300,2012
  3 , 5 ,320,2012
..
要得到这样的数据列表
lev/year  2010 2011 2012
   5       100  0   620
   6       101  0    0
   7       200  201  0

如果YEAR固定,可以用CASE WHEN 或 DECODE 来搞定,如果Year 不固定,一个SQL很难搞定,需要用PROCEDURE
--参考方法--

with table_ta as
(select 1 "TYPE",5 "LEV",100 "NUM",2010 "YEAR" from dual
union all
select  1 , 6 ,101,2010 from dual
union all
select  2 , 7 ,200,2010 from dual
union all
select  2 , 7 ,201,2011 from dual
union all
select   3 , 5 ,300,2012 from dual
union all
select  3 , 5 ,320,2012 from dual
)

--方法一
select a.lev,sum(decode(a.YEAR,2010,a.num,0)) "2010",
sum(decode(a.YEAR,2011,a.num,0)) "2011",
sum(decode(a.YEAR,2012,a.num,0)) "2012" 
from table_ta a group by a.lev order by a.lev

--方法二
select a.lev,sum(case a.YEAR when 2010 then a.num else 0 end) "2010",
sum(case a.YEAR when 2011 then a.num else 0 end) "2011",
sum(case a.YEAR when 2012 then a.num else 0 end) "2012" 
from table_ta a group by a.lev order by a.lev
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:11:47
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6807/
本文WWW.DOC100.NET DOC100.NET版权所有。