sql 组合问题,在线等。。。。

fengyuananan 2011-08-11 05:03:59
我根据这句话 select * from Forbug_HTMHkZje
得到的集合是
id deptcode time money
1 001014 2011-04-01 00:00:00:000 1000000
2 001014 2011-05-01 00:00:00:000 5000000
3 001013 2011-05-01 00:00:00:000 3000000
4 001013 2011-04-01 00:00:00:000 2000000
5 001015 2011-06-01 00:00:00:000 350000
6 001016 2011-04-01 00:00:00:000 25000000


我怎么写sql得到这样一个集合呢?
时间 001014 001013 001015 001016 --这一行标题,不用管,只用下面的集合
2011-04-01 1000000 2000000 0 25000000
2011-05-01 5000000 3000000 0 0
2011-06-01 0 0 350000 0
要得到这个集合,怎么写sql呢?高手帮忙看看啊。。。。
...全文
70 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-08-11
  • 打赏
  • 举报
回复
use Tempdb
go
--> -->

if not object_id(N'Forbug_HTMHkZje') is null
drop table Forbug_HTMHkZje
Go
Create table Forbug_HTMHkZje([id] int,[deptcode] NVARCHAR(20),[time] Datetime,[money] int)
Insert Forbug_HTMHkZje
select 1,'001014','2011-04-01 00:00:00:000',1000000 union all
select 2,'001014','2011-05-01 00:00:00:000',5000000 union all
select 3,'001013','2011-05-01 00:00:00:000',3000000 union all
select 4,'001013','2011-04-01 00:00:00:000',2000000 union all
select 5,'001015','2011-06-01 00:00:00:000',350000 union all
select 6,'001016','2011-04-01 00:00:00:000',25000000
Go
DECLARE @s NVARCHAR(2000)
SET @s='select convert(varchar(10),[time],120) as Date'
Select @s=@s+','+QUOTENAME(deptcode)+'=sum(case when deptcode='+QUOTENAME(deptcode,'''')+' then [money] else 0 end)' from Forbug_HTMHkZje GROUP BY deptcode
EXEC(@s+' from Forbug_HTMHkZje group by convert(varchar(10),[time],120)')

/*
Date 001013 001014 001015 001016
2011-04-01 2000000 1000000 0 25000000
2011-05-01 3000000 5000000 0 0
2011-06-01 0 0 350000 0
*/
fengyuananan 2011-08-11
  • 打赏
  • 举报
回复
我知道什么问题了,现在好了。。。呵呵。。。谢谢你们的帮助,这就结贴
快溜 2011-08-11
  • 打赏
  • 举报
回复
这个,不可能吧。那就不知道了。
fengyuananan 2011-08-11
  • 打赏
  • 举报
回复
中括号加上了,还是报那个错啊。。。
快溜 2011-08-11
  • 打赏
  • 举报
回复
money是关键字,加个[]
快溜 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fengyuananan 的回复:]
有啊,最后一列就是的啊。。。
[/Quote]
declare @sql varchar(8000)
set @sql = 'select time'
select @sql = @sql + ', max(case deptcode when ''' + deptcode +
''' then [money] else 0 end) [' + deptcode + ']'
from (select distinct deptcode from Forbug_HTMHkZje) as a
set @sql = @sql + ' from Forbug_HTMHkZje group by time'
exec(@sql)
fengyuananan 2011-08-11
  • 打赏
  • 举报
回复
有啊,最后一列就是的啊。。。
geniuswjt 2011-08-11
  • 打赏
  • 举报
回复
你确定有money这列?[Quote=引用 3 楼 fengyuananan 的回复:]
消息 207,级别 16,状态 1,第 1 行
列名 'money' 无效。
消息 207,级别 16,状态 1,第 1 行
列名 'money' 无效。

2楼的代码,,我用了报这个错啊?不知道什么原因。。。?
[/Quote]
fengyuananan 2011-08-11
  • 打赏
  • 举报
回复
消息 207,级别 16,状态 1,第 1 行
列名 'money' 无效。
消息 207,级别 16,状态 1,第 1 行
列名 'money' 无效。

2楼的代码,,我用了报这个错啊?不知道什么原因。。。?
快溜 2011-08-11
  • 打赏
  • 举报
回复

declare @sql varchar(8000)
set @sql = 'select time'
select @sql = @sql + ', max(case deptcode when ''' + deptcode +
''' then money else 0 end) [' + deptcode + ']'
from (select distinct deptcode from Forbug_HTMHkZje) as a
set @sql = @sql + ' from Forbug_HTMHkZje group by time'
exec(@sql)
geniuswjt 2011-08-11
  • 打赏
  • 举报
回复
列转行。。。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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