日期:2014-05-18  浏览次数:20397 次

行转列-优化问题
表格是这样子的
name subject grade
张三 语文 90
张三 数学 80
张三 英语 70
李四 语文 60
李四 数学 90
李四 英语 80

用查询语句 使查出来的东西 显示成 
姓名 语文 数学 英语
张三 90 80 70  
李四 60 90 80

典型的行转列问题 我用的SQL代码是
SQL code

select name as 姓名 ,max(case subject when '语文' then grade else 0 end) 语文,max(case subject when '数学' then grade else 0 end) 数学,max(case subject when '英语' then grade else 0 end) 英语  from grades group by name


虽然实现了功能 但是上头又给我新的难题,说我这种查询语句 对大型数据内容 比如上百万的数据就查的很慢了
然后叫我用分页查询来辅助完成上面的查询,从而优化查询。

我的上网查了一下 研究了一下 弄出个代码
SQL code

select top 6 * 
from grades
where name not in
(select top 0 name from grades order by name)
order by name



之后我就完全不知道要怎么结合这些东西 完成查询的优化了,求高手指点,我是新手!今天刚注册。



------解决方案--------------------
这不是新建一个表,我只是做个例子给你看.
主体是这句:
SQL code

SELECT name,语文,数学,英语 FROM t1
PIVOT (
    MAX(grade) FOR subject IN (语文,数学,英语)
)p