sql语句列转行

有表table 字段值如下:
字段 A B C D E
值 1 2 3 4 5
需转成如下格式
A 1
B 2
C 3
D 4
E 5
求SQL语句写法

我整理的行转列的问题:

--创建tb表
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go

select * From tb

--SQL SERVER 2000静态行转列
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else null end) 语文,
max(case 课程 when '数学' then 分数 else null end) 数学,
max(case 课程 when '物理' then 分数 else null end) 物理
from tb
group by 姓名

--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql) 

--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b

--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')

 希望对你的学习有帮助。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-18
主要应用case语句来解决行转列的问题
行转列问题主要分为两类
1)简单的行转列问题:
示例表:
id sid course result
1 2005001 语文 80.0
2 2005001 数学 90.0
3 2005001 英语 80.0
4 2005002 语文 56.0
5 2005002 数学 69.0
6 2005002 英语 89.0
执行
select sid,语文=isnull(sum(case course when '语文' then result end),0),
数学=isnull(sum(case course when '数学' then result end),0),
英语=isnull(sum(case course when '英语' then result end),0)
from result
group by sid
order by sid

得出结果
sid 语文 数学 英语
2005001 80.0 90.0 80.0
2005002 56.0 69.0 89.0本回答被网友采纳
第2个回答  推荐于2017-11-26
select 'A',A from table union all
select 'B', B from table union all
select 'C', C from table union all
select 'D',D from table union all
select 'E',E from table
遇到行列转换的问题第一反应就是 uinon all本回答被提问者采纳
第3个回答  2013-12-18
用union可以解决:
select 'A' as '字段名 ',A from MyTable union select 'B', B from MyTable union select 'C', C from MyTable union select 'D',D from MyTable union select 'E',E from MyTable

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网