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

多表查询语句这个怎么写 在线等
S表中id name
 1 1 张三
 2 2 李四
 3 3 王五
 4 4 赵六
c表中 id name 
1 1 宝马
2 2 奥迪
3 3 雪铁龙
4 4 奔驰
5 5 兰博基尼
6 6 大众

sc表中 sid cid SMoney 要得到查询显示如下所示的结果
1 1 1 50.00
2 1 2 30.00 姓名 宝马 奥迪 雪铁龙 奔驰 兰博基尼 大众
3 1 3 50.00 张三 50.00 30.00 50.00 80.00 NULL NULL
4 1 4 80.00 李四 70.00 35.00 40.00 50.00 NULL NULL
5 2 1 25.00 王五 NULL NULL NULL 50.00 NULL 60.OO
6 2 2 35.00 赵六 90.00 NULL NULL NULL 80.OO NULL
7 2 3 40.oo
8 2 4 50.00
9 2 1 70.00
10 3 4 50.00
11 3 6 60.00
12 4 5 80.00
13 4 1 90.00
14 1 1 30.00
 

------解决方案--------------------
三表联查 行列转换。
------解决方案--------------------
三表联查 行列转换。
------解决方案--------------------
select b.姓名,sum(b.宝马),sum(b.奥迪),sum(b.雪铁龙),sum(b.奔驰),sum(b.兰博基尼),sum(b.大众) from
( select s.name as 姓名,(case when c.name='宝马'then sc.smoney else null end) as 宝马 ,
(case when c.name='奥迪'then sc.smoney else null end) as 奥迪,
(case when c.name='雪铁龙'then sc.smoney else null end) as 雪铁龙,
(case when c.name='奔驰'then sc.smoney else null end) as 奔驰,
(case when c.name='兰博基尼'then sc.smoney else null end) as 兰博基尼,
(case when c.name='大众'then sc.smoney else null end) as 大众
from s,c,sc
where sc.sid=s.id and sc.cid=c.id ) b
group by b.姓名
------解决方案--------------------
select b.姓名,sum(b.宝马),sum(b.奥迪),sum(b.雪铁龙),sum(b.奔驰),sum(b.兰博基尼),sum(b.大众) from
( select s.name as 姓名,(case when c.name='宝马'then sc.smoney else null end) as 宝马 ,
(case when c.name='奥迪'then sc.smoney else null end) as 奥迪,
(case when c.name='雪铁龙'then sc.smoney else null end) as 雪铁龙,
(case when c.name='奔驰'then sc.smoney else null end) as 奔驰,
(case when c.name='兰博基尼'then sc.smoney else null end) as 兰博基尼,
(case when c.name='大众'then sc.smoney else null end) as 大众
from s,c,sc
where sc.sid=s.id and sc.cid=c.id ) b
group by b.姓名