number course score
1 C# 80
1 Java 60
1 SQL 100
2 C# 50
2 Java 30
2 SQL 70select查询number C# Java SQL
1 80 60 100
2 50 30 70
上面是一张表 使用sql查询变成下面这种形式
1 C# 80
1 Java 60
1 SQL 100
2 C# 50
2 Java 30
2 SQL 70select查询number C# Java SQL
1 80 60 100
2 50 30 70
上面是一张表 使用sql查询变成下面这种形式
select number,
max(case course when 'JAVA' then score else null end) [JAVA],
...
from tb
group by number
行转列,楼主搜精华帖!
http://topic.csdn.net/u/20110822/22/d84cd6e9-d98e-4d88-8e5c-441015ac3126.html
max(case course when 'C#'then score else 0 end) C# ,
max(case course when 'Java' then score else 0 end) Java ,
max(case course when 'SQL' then score else 0 end) SQL
from tb
group by [number]
select * from data pivot (max([Score]) for [Course] in([C#],[JAVA],[SQL]))number
麻烦解释一下pivot是一个神马意思诶
谢了
select number,[c#],[java],[sql] from tb pivot( max(score) for course in (c#,java,sql)) as a
2005以上新的函数 pivot去查下用法就知道了
[number] ,
max(case course when 'C#'then score else 0 end) C# ,
max(case course when 'Java' then score else 0 end) Java ,
max(case course when 'SQL' then score else 0 end) SQL
from
tb
group by
[number]
pivot 的一般语法是:pivot (聚合函数(列) FOR 列 in (…) )AS 别名
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P完整语法:table_sourcePIVOT(聚合函数(value_column)FOR pivot_columnIN(<column_list>)) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现完整语法:table_sourceUNPIVOT(value_columnFOR pivot_columnIN(<column_list>)) 注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别
在数据库属性->选项->兼容级别改为 90