日期:2014-05-18 浏览次数:20783 次
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