列转行,求一语句,高分请帮忙

ellison021601 2007-03-07 04:35:44
有两列

月份 现金
200501 100.5
200502 200.1
200503 3000
................


变为
200501 200502 200503 ..............
100.5 200.1 3000 ..................
...全文
404 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlp321002 2007-03-07
  • 打赏
  • 举报
回复
--借楼上数据一用
declare @s varchar(max)
set @s=''
select @s=@s+',['+月份+']' from (select distinct 月份 from t) t
set @s=stuff(@s,1,1,'')
exec('
select * from t
pivot
(sum(现金)
for 月份 in ('+@s+')
)as pt ')

/*
200501 200502 200503
------ ------- -------
100.50 200.10 3000.00
*/
wangdehao 2007-03-07
  • 打赏
  • 举报
回复
create table test(
月份 varchar(20),
现金 decimal(9,2)
)
insert test
select '200501',100.5
union all select '200502',200.1
union all select '200503',3000

declare @sql varchar(8000)

set @sql=''

select @sql=@sql+',sum(case when 月份='''+月份+''' then 现金 else 0 end ) [' +月份+']'
from test order by 月份
set @sql='select '+stuff(@sql,1,1,'') + ' from test '
print @sql
exec(@sql)
dawugui 2007-03-07
  • 打赏
  • 举报
回复
if object_id('pubs..tb') is not null
drop table tb
go

create table tb
(
月份 varchar(10),
现金 decimal(18,2)
)

insert into tb(月份,现金) values('200501',100.5)
insert into tb(月份,现金) values('200502',200.1)
insert into tb(月份,现金) values('200503',3000)

select max(t200501) as '200501',max(t200502) as '200502',max(t200503) as '200503' from
(
select
case when 月份='200501' then 现金 else 0 end as 't200501',
case when 月份='200502' then 现金 else 0 end as 't200502',
case when 月份='200503' then 现金 else 0 end as 't200503'
from tb
) t

drop table tb

/*result
200501 200502 200503
-------------------- -------------------- --------------------
100.50 200.10 3000.00

(所影响的行数为 1 行)
*/
paoluo 2007-03-07
  • 打赏
  • 举报
回复
Create Table TEST
(月份 Varchar(6),
现金 Numeric(10, 1))
Insert TEST Select '200501', 100.5
Union All Select '200502', 200.1
Union All Select '200503', 3000
GO
Declare @S Nvarchar(4000)
Select @S = ''
Select @S = @S + N', SUM(Case 月份 When ''' + 月份 + N''' Then 现金 Else 0 End) As ['+ 月份 + ']'
From TEST Group By 月份 Order By 月份
Select @S = 'Select' + Stuff(@S, 1, 1, '') + ' From TEST'
EXEC(@S)
GO
Drop Table TEST
--Result
/*
200501 200502 200503
100.5 200.1 3000.0
*/
子陌红尘 2007-03-07
  • 打赏
  • 举报
回复
create table t(月份 varchar(8),现金 numeric(8,2))
insert into t select '200501',100.5
insert into t select '200502',200.1
insert into t select '200503',3000
go

declare @sql varchar(8000)
set @sql=''

select @sql=@sql+',['+月份+']=sum(case 月份 when '''+月份+''' then 现金 else 0 end)' from t group by 月份

set @sql='select '+stuff(@sql,1,1,'')+' from t'

exec(@sql)
go

/*
200501 200502 200503
---------------------------------------- ---------------------------------------- ----------------------------------------
100.50 200.10 3000.00
*/

drop table t
go
paoluo 2007-03-07
  • 打赏
  • 举报
回复
Declare @S Nvarchar(4000)
Select @S = ''
Select @S = @S + N', SUM(Case 月份 When ''' + 月份 + N''' Then 现金 Else 0 End) As ['+ 月份 + ']'
From TEST Group By 月份 Order By 月份
Select @S = 'Select' + Stuff(@S, 1, 1, '') + ' From TEST'
EXEC(@S)
子陌红尘 2007-03-07
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql=''

select @sql=@sql+'[,'+月份+']=sum(case 月份 when '''+月份+''' then 现金 else 0 end)' from 表 group by 月份

set @sql='select '+stuff(@sql,1,1,'')+' from 表'

exec(@sql)
dawugui 2007-03-07
  • 打赏
  • 举报
回复
select
case when 月份='200501' then 现金 else 0 end as '200501',
case when 月份='200502' then 现金 else 0 end as '200502',
case when 月份='200503' then 现金 else 0 end as '200503'
........
from tb

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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