首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

有个sql查询语句请问上

2012-12-16 
有个sql查询语句请教下。情况是这样的,有个表有四个属性,分为名称,年份,月份,数量name,year,month,num我现

有个sql查询语句请教下。
情况是这样的,有个表有四个属性,分为名称,年份,月份,数量   name,year,month,num
我现在是要查询一年中12个月的数量明细。名称是固定的10个值,需要查询出的结果如下:
name,year,一月份num,二月份num,三月份num.......十二月份num

请问这个该咋整。

[最优解释]

if object_id('test') is not null
drop table test
go
create table test
(
name varchar(10),
year int,
month int,
num int
)
go
insert test
select 'test01',2012,1,20 union all
select 'test01',2012,2,20 union all
select 'test01',2012,2,20 union all
select 'test01',2012,3,20 union all
select 'test01',2012,4,20 union all
select 'test01',2012,4,20 union all
select 'test01',2012,4,20 union all
select 'test01',2012,5,20 union all
select 'test01',2012,5,20 union all
select 'test01',2012,6,20 union all
select 'test01',2012,7,20 union all
select 'test01',2012,7,20 union all
select 'test01',2012,7,20 union all
select 'test01',2012,7,20 union all
select 'test01',2012,7,20 union all
select 'test01',2012,8,20 union all
select 'test01',2012,9,20 union all
select 'test01',2012,10,20 union all
select 'test01',2012,11,20 union all
select 'test01',2012,12,20 
go

select
name,
year,
sum(case when month=1 then num else 0 end) as [1月份num],
sum(case when month=2 then num else 0 end) as [2月份num],
sum(case when month=3 then num else 0 end) as [3月份num],
sum(case when month=4 then num else 0 end) as [4月份num],
sum(case when month=5 then num else 0 end) as [5月份num],
sum(case when month=6 then num else 0 end) as [6月份num],
sum(case when month=7 then num else 0 end) as [7月份num],
sum(case when month=8 then num else 0 end) as [8月份num],
sum(case when month=9 then num else 0 end) as [9月份num],
sum(case when month=10 then num else 0 end) as [10月份num],
sum(case when month=11 then num else 0 end) as [11月份num],
sum(case when month=12 then num else 0 end) as [12月份num]
from
test
group by
name,year

/*
name       year        1月份num      2月份num      3月份num      4月份num      5月份num      6月份num      7月份num      8月份num      9月份num      10月份num     11月份num     12月份num
---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
test01     2012        20          40          20          60          40          20          100         20          20          20          20          20



(1 行受影响)


*/


[其他解释]
大清早的没人吗?????自顶一下。
[其他解释]
这个啊  坐等大神,反正我写出来基本是惨不忍睹了,行转换为啥不用EXEL呢
[其他解释]

select name,year,
max(case month when 1 then num esle 0 end)一月份num,
max(case month when 2 then num esle 0 end)二月份num,
max(case month when 3 then num esle 0 end)二月份num,
.....
from tbName
group by name,year

--行列转化

[其他解释]
引用:
SQL code?



123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

if object_id('test') is not nulldrop table test go create tabl……

为啥我第一反应是用循环写呢- -
太失败了,
没学过计算机,现在要用,硬伤啊
[其他解释]
引用:
引用:SQL code?



123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

if object_id('test') is not n……


多见几次你就知道了  没别的办法
[其他解释]
引用:
SQL code?



123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

if object_id('test') is not nulldrop table test go create tabl……


多谢,你的方法很管用。
另外,我还有个问题请教下,实际情况具体如表内所示,这是最原始的那张表内的实际数据,这都是查询的同一年同一月的数据,我现在需要在之前所说的功能之外,还需要将6和7两行的数据合并为一个数据显示为一行即可。
这种情况的话需要怎么处理呢?再次感谢!

[其他解释]
引用:
引用:SQL code?



123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

if object_id('test') is not n……


你可以先把那个字段的数据处理一下  不要贴图片
[其他解释]

group by name,year
--改为 group by left(name,5),year试一下

[其他解释]
引用:
引用:
引用:SQL code?



123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

if object_id('test')……


多谢多谢!!终于成功了!

热点排行