日期:2014-05-17  浏览次数:20857 次

请问这个sql语句怎么写啊?
在一个test表里面字段和数据如下:

name teacher class price
初级会计务实 李真 精讲班 200  
初级会计务实 李真 通关班 300  
初级会计务实 李真 协议班 800 
经济法基础 陆宝 精讲班 200  
经济法基础 陆宝 通关班 300  
经济法基础 陆宝 协议班 800  

我想查询出这样的效果:
课程 老师 精讲班 通关班 协议班 
初级会计务实 李真 200 300 800 
经济法基础 陆宝 200 300 800

本人小菜鸟,在线等大神的帮助

------解决方案--------------------
SELECT name, teacher, sum("精讲班"), sum("通关班"), sum("协议班")
FROM (select name,
teacher,
case
when a.class = '精讲班' then
a.price
END "精讲班",
case
when a.class = '通关班' then
a.price
END "通关班",
case
when a.class = '协议班' then
a.price
END "协议班"
from test a) b
 group by name, teacher;

------解决方案--------------------

SELECT name, teacher, sum("精讲班"), sum("通关班"), sum("协议班")
FROM (select name,
teacher,
case
when a.class = '精讲班' then
a.price
END "精讲班",
case
when a.class = '通关班' then
a.price
END "通关班",
case
when a.class = '协议班' then
a.price
END "协议班"
from test_1 a) b
 group by name, teacher;
------解决方案--------------------
with temp1 as (select distinct name,teacher from test) 
select name as 课程,teacher as 老师,
(select price from test where name=a.name and teacher=a.teacher and class='精讲班') as 精讲班,
(select price from test where name=a.name and teacher=a.teacher and class='通关班') as 通关班,
(select price from test where name=a.name and teacher=a.teacher and class='协议班') as 协议班
from temp1 a