注册 登录
编程论坛 SQL Server论坛

求助:多表关联,请高手指教,如何写SQL?

pargy 发布于 2018-01-10 10:35, 2053 次点击
原表是ABCD四张表            
A表            
学号    姓名    性质    分组
A001    张三    气球    一组
A005    李四    足球    一组
A002    王五    足球    一组
A003    赵六    足球    二组
A004    张七    气球    二组

B表            
分组    地址        
一组    学校A区        
二组    到人小去        

C表            
缴费情况分组    学号   
JF001    一组    A001   
JF002    一组    A002   
JF003    二组    A004   

D表            
缴费情况学号    型号    金额
JF001    A001    QQ-A    5
JF001    A001    QQ-B    8
JF001    A001    QQ-C    10
JF002    A002    ZQ-A    25
JF002    A002    ZQ-B    30
JF002    A002    ZQ-C    50
JF003    A004    QQ-B    16
JF003    A004    QQ-C    30

需要通过SQL,得到结果表            
分组    学号    姓名    缴费情况型号    金额    性质    地址
一组    A001    张三    JF001    QQ-A    5    气球    学校A区
一组    A001    张三    JF001    QQ-B    8    气球    学校A区
一组    A001    张三    JF001    QQ-C    10    气球    学校A区
一组    A002    王五    JF002    ZQ-A    25    足球    学校A区
一组    A002    王五    JF002    ZQ-B    30    足球    学校A区
一组    A002    王五    JF002    ZQ-C    50    足球    学校A区
一组    A005    李四                足球    学校A区
二组    A004    张七    JF003    QQ-B    16    气球    到人小去
二组    A004    张七    JF003    QQ-C    30    气球    到人小去
二组    A003    赵六                足球    到人小去
2 回复
#2
mywisdom882018-01-11 15:48
你的表结构,有点问题,你看下面的列子:
/*
-- 表1(学号 varchar(6),姓名 varchar(20),性别 varchar(2),年龄 int,班级 varchar(10))
create table #表1(学号 varchar(6),姓名 varchar(20),性别 varchar(2),年龄 int,班级 varchar(10))
insert into #表1
select 'a001','张三','男',25,'b001' union all
select 'a002','李四','女',24,'b002' union all
select 'a003','王五','男',23,'b003'

-- 表2(班级  varchar(10),学院  varchar(20))
create table #表2(班级  varchar(10),学院  varchar(20))
insert into #表2
select 'b001','计算机系2017' union all
select 'b002','数学应用2016' union all
select 'b003','文学考古2018'

-- 表3(学科  varchar(10),学号  varchar(6),分数 numeric(5,2))
create table #表3(学科  varchar(10),学号  varchar(6),分数 numeric(5,2))
insert into #表3
select '数学','a001',81 union all
select '数学','a002',82 union all
select '数学','a003',83 union all
select '语文','a001',91 union all
select '语文','a002',92 union all
select '语文','a003',93 union all
select '英语','a001',71 union all
select '英语','a003',73

*/
-- 查询成绩对应的学号,姓名,班级,学院
select a.学号,a.姓名,a.班级,b.学院,c.学科,c.分数
from #表3 as c
left join #表1 as a on a.学号=c.学号
left join #表2 as b on a.班级=b.班级
order by c.学号
#3
mywisdom882018-01-11 15:48
a001    张三    b001    计算机系2017    数学    81.00
a001    张三    b001    计算机系2017    语文    91.00
a001    张三    b001    计算机系2017    英语    71.00
a002    李四    b002    数学应用2016    语文    92.00
a002    李四    b002    数学应用2016    数学    82.00
a003    王五    b003    文学考古2018    数学    83.00
a003    王五    b003    文学考古2018    语文    93.00
a003    王五    b003    文学考古2018    英语    73.00
1