行转列(找了好久没找到结果)

Leighf 2007-01-16 01:32:42
有表如下:

ID Amount Style
A1 500 重不良
A1 300 中不良
A1 150 轻不良
B1 300 重不良
B1 200 轻不良
B2 120 轻不良

转换后:

ID 重不良 中不良 轻不良
A1 500 300 150
B1 300 - 200
B2 - - 120


测试表:

create table test([id] varchar(4), amount int, style varchar(6))

insert into test values('A1',500,'重不良')
insert into test values('A1',300,'中不良')
insert into test values('A1',150,'轻不良')
insert into test values('B1',300,'重不良')
insert into test values('B1',200,'轻不良')
insert into test values('B2',120,'轻不良')

drop table test

帮忙!!谢谢
...全文
185 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
marco08 2007-01-16
  • 打赏
  • 举报
回复

create table test([id] varchar(4), amount int, style varchar(20))

insert into test values('A1',500,'重不良')
insert into test values('A1',300,'中不良')
insert into test values('A1',150,'轻不良')
insert into test values('B1',300,'重不良')
insert into test values('B1',200,'轻不良')
insert into test values('B2',120,'轻不良')

declare @sql varchar(8000)
set @sql='select [id], '
select @sql=@sql+quotename(style)+'=max(case when style='+quotename(style, '''')+' then rtrim(amount) else ''-'' end),' from test group by style
select @sql=left(@sql, len(@sql)-1), @sql=@sql+' from test group by [id]'
exec(@sql)

--result
id 轻不良 中不良 重不良
---- ------------ ------------ ------------
A1 150 300 500
B1 200 - 300
B2 120 - -
akuzou 2007-01-16
  • 打赏
  • 举报
回复
--结果
ID 重不良 中不良 轻不良
---- ----------- ----------- ------
A1 500 300 150
B1 300 0 200
B2 0 0 120

(所影响的行数为 3 行)
akuzou 2007-01-16
  • 打赏
  • 举报
回复
select ID,
sum(case when Style='重不良' then Amount else 0 end) 重不良,
sum(case when Style='中不良' then Amount else 0 end) 中不良,
sum(case when Style='轻不良' then Amount else 0 end) 轻不良
from test group by ID

22,209

社区成员

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

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