不同的班有重名的人,同一个班没有重名的,班级和姓名是联合主键
租借表
姓名 班级 性别 借书数量(int类型)
张三 一班 男 10
李四 二班 女 7
张三 二班 女 5
李四 一班 男 3
张三 一班 男 5
归还表
姓名 班级 性别 还书数量(int类型)
张三 一班 男 9
李四 二班 女 5
张三 二班 女 2
李四 一班 男 1
张三 一班 男 3
查找现在所有人欠书本数为1-3本的且性别为女的查询结果
显示结果为:
姓名 班级 性别 仍欠数量
......
------解决方案--------------------
- SQL code
SELECT T1.[姓名],T1.[班级],T1.[性别],T1.[借书数量]-ISNULL(T2.[还书数量],0) AS 仍欠数量FROM [租借表] T1LEFT JOIN [归还表] T2 ON T1.[姓名]=T2.[姓名] AND T1.[班级]=T2.[班级]AND T1.[借书数量]-ISNULL(T2.[还书数量],0) BETWEEN 1 AND 3
------解决方案--------------------
- SQL code
select a.*,a.借书数量-ISNULL(b.还书数量,0) as 仍欠数量from (select 姓名,班级,性别,SUM(借书数量) as 借书数量 from 租借表 where 性别='女' group by 姓名,班级,性别) as aleft 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
------解决方案--------------------
- SQL code
if object_id('租借表') is not null drop table 租借表gocreate table 租借表( 姓名 varchar(10), 班级 varchar(10), 性别 varchar(10), 借书数量 int)goinsert into 租借表select '张三','一班','男',10 union allselect '李四','二班','女',7 union allselect '张三','二班','女',5 union allselect '李四','一班','男',3 union allselect '张三','一班','男',5goif object_id('归还表') is not null drop table 归还表gocreate table 归还表( 姓名 varchar(10), 班级 varchar(10), 性别 varchar(10), 还书数量 int)goinsert into 归还表select '张三','一班','男',9 union allselect '李四','二班','女',5 union allselect '张三','二班','女',2 union allselect '李四','一班','男',1 union allselect '张三','一班','男',3goselect * from ( select 姓名,班级,欠书本数=sum(借书数量)-(select sum(还书数量) from 归还表 where 班级=a.班级 and 姓名=a.姓名) from 租借表 a where 性别='女' group by 班级,姓名) t where 欠书本数<=3go/*姓名 班级 欠书本数---------- ---------- -----------李四 二班 2张三 二班 3(2 行受影响)*/
------解决方案--------------------
+1
------解决方案--------------------
------解决方案--------------------
SELECT T1.[姓名],T1.[班级],T1.[性别],T1.[借书数量]-ISNULL(T2.[还书数量],0) AS 仍欠数量
FROM [租借表] T1
LEFT JOIN [归还表] T2 ON T1.[姓名]=T2.[姓名] AND T1.[班级]=T2.[班级]and T2 .[性别] ='女'
WHERE T1.[借书数量]-ISNULL(T2.[还书数量],0) BETWEEN 1 AND 3
and T1.[性别] ='女'
------解决方案--------------------
运行结果
姓名 班级 性别 仍欠数量
李四 二班 女 2
张三 二班 女 1
------解决方案--------------------
- SQL code
select m.姓名, m.班级, m.性别, m.借书数量 - n.还书数量 仍欠数量from 租借表 m , 归还表 nwhere m.姓名 = n.姓名 and m.班级 = n.班级 and m.性别 = '女' and m.借书数量 - n.还书数量 between 1 and 3