日期:2014-05-18 浏览次数:20686 次
SELECT T1.[姓名],T1.[班级],T1.[性别],T1.[借书数量]-ISNULL(T2.[还书数量],0) AS 仍欠数量 FROM [租借表] T1 LEFT JOIN [归还表] T2 ON T1.[姓名]=T2.[姓名] AND T1.[班级]=T2.[班级] AND T1.[借书数量]-ISNULL(T2.[还书数量],0) BETWEEN 1 AND 3
------解决方案--------------------
select a.*,a.借书数量-ISNULL(b.还书数量,0) as 仍欠数量 from (select 姓名,班级,性别,SUM(借书数量) as 借书数量 from 租借表 where 性别='女' group by 姓名,班级,性别) as a left join (select 姓名,班级,SUM(还书数量) as 还书数量 from 归还表 where 性别='女' group by 姓名,班级) as b on a.姓名=b.姓名 and a.班级=b.班级 where a.借书数量-ISNULL(b.还书数量,0) between 1 and 3
------解决方案--------------------
select
a.*,a.借书数量-ISNULL(b.还书数量,0) as 仍欠数量
from (select 姓名,班级,性别,SUM(借书数量) as 借书数量 from 租借表 where 性别='女' group by 姓名,班级,性别) as a
left join (select 姓名,班级,SUM(还书数量) as 还书数量 from 归还表 where 性别='女' group by 姓名,班级) as b on a.姓名=b.姓名 and a.班级=b.班级
where a.借书数量-ISNULL(b.还书数量,0) between 1 and 3
------解决方案--------------------
if object_id('租借表') is not null drop table 租借表 go create table 租借表 ( 姓名 varchar(10), 班级 varchar(10), 性别 varchar(10), 借书数量 int ) go insert into 租借表 select '张三','一班','男',10 union all select '李四','二班','女',7 union all select '张三','二班','女',5 union all select '李四','一班','男',3 union all select '张三','一班','男',5 go if object_id('归还表') is not null drop table 归还表 go create table 归还表 ( 姓名 varchar(10), 班级 varchar(10), 性别 varchar(10), 还书数量 int ) go insert into 归还表 select '张三','一班','男',9 union all select '李四','二班','女',5 union all select '张三','二班','女',2 union all select '李四','一班','男',1 union all select '张三','一班','男',3 go select * from ( select 姓名,班级,欠书本数=sum(借书数量)-(select sum(还书数量) from 归还表 where 班级=a.班级 and 姓名=a.姓名) from 租借表 a where 性别='女' group by 班级,姓名 ) t where 欠书本数<=3 go /* 姓名 班级 欠书本数 ---------- ---------- ----------- 李四 二班 2 张三 二班 3 (2 行受影响) */
------解决方案--------------------
+1
select m.姓名, m.班级, m.性别, m.借书数量 - n.还书数量 仍欠数量 from 租借表 m , 归还表 n where m.姓名 = n.姓名 and m.班级 = n.班级 and m.性别 = '女' and m.借书数量 - n.还书数量 between 1 and 3