应该是个行列转换的问题,有谁告诉我怎么做?
表结构如下:
日期 名字 价格
20050505 a 2
20050506 b 3
20050507 c 5
其他的数据依次类推,名字可能还会有D,E,F之类的
要求得到这样的结果
日期 a b c d e
20050505 2 0 0 0 0
20050506 0 3 0 0 0
20050507 0 0 5 0 0
等等,名字中有多少个不相同的,那么标题拦就要出现多少个名字
请问怎么写啊?
问题点数:20、回复次数:4Top
1 楼hlq8210(影子)回复于 2005-08-03 15:50:11 得分 10
declare @a varchar(1000)
set @a='select name '
select @a=@a+',sum(case when a='''+a+''' then b end)'+' as '+ a ----這裡sum改為min或max結果一樣
from (select distinct a from TableA)T1
set @a=@a+' from TableA group by name'
--exec(@a)
print (@a)
select name ,sum(case when a='andy ' then b end) as andy ,sum(case when a='fenlam' then b end) as fenlam from TableA group by name
(我的測試表是 Tablea(name ,a,b)以a開始行列轉換
Top
2 楼vivianfdlpw()回复于 2005-08-03 16:26:34 得分 10
create table A
(
[日期] varchar(10),
[名字] varchar(10),
[价格] int
)
insert A
select '20050505','a',2 union
select '20050506','b',3 union
select '20050507','c',5 union
select '20050508','d',2 union
select '20050509','e',2
--测试
declare @sql varchar(2000)
set @sql=''
select @sql=@sql+',['+[名字]+']=sum(case when [名字]='''+[名字]+''' then [价格] else 0 end)'
from A
group by [名字]
set @sql='select [日期]'+@sql+' from A group by [日期]'
--print @sql
exec(@sql)
--删除测试环境
drop table A
--结果
/*
日期 a b c d e
---------- ----------- ----------- ----------- ----------- ----
20050505 2 0 0 0 0
20050506 0 3 0 0 0
20050507 0 0 5 0 0
20050508 0 0 0 2 0
20050509 0 0 0 0 2
*/Top
3 楼filebat(Mark)回复于 2005-08-03 20:44:36 得分 0
呵呵,又是一个列不定的交叉数据报表问题.Top
4 楼xianggang101(tanjun)回复于 2005-08-09 14:11:41 得分 0
一般地经典Top




