sql server如何把查询的多行记录显示在一行上面:
例如下面的学生成绩表,想把多个学科的成绩显示在一列上面
--行列转置
select 学号='1',姓名='张三',课程='语文',成绩='99'
into #base1
union
select 学号='1',姓名='张三',课程='数学',成绩='105'
union
select 学号='2',姓名='李四',课程='语文',成绩='99'
union
select 学号='2',姓名='李四',课程='数学',成绩='105'
union
select 学号='2',姓名='李四',课程='外语',成绩='110'
union
select 学号='3',姓名='王五',课程='语文',成绩='89'
union
select 学号='3',姓名='王五',课程='数学',成绩='130'
union
select 学号='3',姓名='王五',课程='外语',成绩='89'
union
select 学号='3',姓名='王五',课程='物理',成绩='80'
union
select 学号='3',姓名='王五',课程='历史',成绩='85'
select * from #base1
select 学号,姓名,[语文],[数学],[外语],[物理],[历史] from #base1
pivot(max(成绩) for 课程 in ([语文],[数学],[外语],[物理],[历史]))pvt
使用case when 函数再求sum
select * from table
union
select * from table 2
还可以使用行转列:
select * from table1(
select 字段1,字段n,sum(字段名称)
from (
select 字段1,字段n,
case when 条件 then 赋值 end as 别名,(为查询的字段)
....
) as a
)as b on .....条件表达式