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

[求助]这句很难写吗?
先上问题:

表一
班级序号 班级名称
1 高三一班
2 高二三班
3 高一二班

表二
班级序号 姓名 语文
1 张三 100
1 李四 99
2 王五 98

表三
班级序号 姓名 数学
1 张三 98
2 王五 87
3 赵六 60

想要的结果
班级序号 班级名称 姓名 语文 数学 合计
1 高三一班 张三 100 98 198
1 高三一班 李四 99 99
2 高二三班 王五 98 97 195
3 高一二班 赵六 60 60

原以为很简单,问了个软件公司搞开发的居然写出来
select 表一.班级序号,班级名称,表二.姓名,表二.语文,表三.数学,表二.语文+表三.数学 from 表一,表二,表三 where 表一.班级序号=表二.班级序号 and 表二.班级序号=表三.班级序号 and 表二.姓名=表三.姓名 order by 表一.班级序号,表二.姓名,表二.语文,表三.数学


我要的是几张表的并集,不是交集,明显不对嘛!!!

请高人指点!

------解决方案--------------------
DECLARE @a TABLE(cId INT,NAME VARCHAR(20))
insert @a select 1 ,'高三一班'
union all select 2 ,'高二三班'
union all select 3 ,'高一二班'

declare @b table(cId int,Name varchar(20),Yw int)
insert @b select 1 ,'张三', 100
union all select 1 ,'李四', 99
union all select 2 ,'王五', 98

declare @c table(cId int,Name varchar(20),Sx int)
insert @c select 1 ,'张三', 98
union all select 2 ,'王五', 87
union all select 3 ,'赵六', 60

SELECT A.cId,a.Name,c.Name Name1,Yw,Sx,Su FROM @a a LEFT JOIN (
SELECT  ISNULL(b.cId,c.cId) cId,
ISNULL(b.Name,c.Name) NAME,
Yw,
Sx,
ISNULL(Yw,0)+ISNULL(Sx,0) Su
FROM @b b FULL JOIN @c c ON b.cid=c.cid AND b.name=c.name

) c  ON a.cid=c.cid

--result
/*cId         Name                 Name1                Yw          Sx          Su          
----------- -------------------- -------------------- ----------- ----------- ----------- 
1           高三一班                 张三                   100         98          198
1           高三一班                 李四                   99          NULL        99
2           高二三班         &