应该是个行列转换的问题,有谁告诉我怎么做?

csddb 2005-08-03 03:40:55
表结构如下:
日期 名字 价格
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
等等,名字中有多少个不相同的,那么标题拦就要出现多少个名字
请问怎么写啊?
...全文
177 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xianggang101 2005-08-09
  • 打赏
  • 举报
回复
一般地经典
filebat 2005-08-03
  • 打赏
  • 举报
回复
呵呵,又是一个列不定的交叉数据报表问题.
vivianfdlpw 2005-08-03
  • 打赏
  • 举报
回复
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
*/
hlq8210 2005-08-03
  • 打赏
  • 举报
回复
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開始行列轉換

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧