不同的班有重名的人,同一个班没有重名的,班级和姓名是联合主键租借表
姓名 班级 性别 借书数量(int类型)
张三 一班 男 10
李四 二班 女 7
张三 二班 女 5
李四 一班 男 3
张三 一班 男 5
归还表
姓名 班级 性别 还书数量(int类型)
张三 一班 男 9
李四 二班 女 5
张三 二班 女 2
李四 一班 男 1
张三 一班 男 3
查找现在所有人欠书本数为1-3本的且性别为女的查询结果显示结果为:
姓名 班级 性别 仍欠数量
......

解决方案 »

  1.   

    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
      

  2.   

    错了,最后一个AND应该是WHERE
    SELECT T1.[姓名],T1.[班级],T1.[性别],T1.[借书数量]-ISNULL(T2.[还书数量],0) AS 仍欠数量
    FROM [租借表] T1
    LEFT JOIN [归还表] T2 ON T1.[姓名]=T2.[姓名] AND T1.[班级]=T2.[班级]
    WHERE T1.[借书数量]-ISNULL(T2.[还书数量],0) BETWEEN 1 AND 3
      

  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
      

  4.   

    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
      

  5.   


    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 行受影响)
    */
      

  6.   


    +    and t1.[性别]='女'
      

  7.   

    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.[性别] ='女'
      

  8.   


    select m.姓名,
           m.班级, 
           m.性别, 
           m.借书数量 - n.还书数量 仍欠数量
    from 租借表 m , 归还表 n
    where m.姓名 = n.姓名 and m.班级 = n.班级 and m.性别 = '女' and m.借书数量 - n.还书数量 between 1 and 3
      

  9.   

    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
    create table 归还表
    (
     姓名 varchar(10),
     班级 varchar(10),
     性别 varchar(10),
     还书数量 int
    )
    insert into 归还表
    select '张三','一班','男',9 union all
    select '李四','二班','女',5 union all
    select '张三','二班','女',2 union all
    select '李四','一班','男',1 union all
    select '张三','一班','男',3select m.姓名,
           m.班级, 
           m.性别, 
           m.借书数量 - n.还书数量 仍欠数量
    from 租借表 m , 归还表 n
    where m.姓名 = n.姓名 and m.班级 = n.班级 and m.性别 = '女' and m.借书数量 - n.还书数量 between 1 and 3drop table 租借表 ,归还表/*
    姓名         班级         性别         仍欠数量        
    ---------- ---------- ---------- ----------- 
    李四         二班         女          2
    张三         二班         女          3(所影响的行数为 2 行)
    */
      

  10.   

    '班级和姓名是联合主键',楼主这题数据是不是有问题?建立联合主键,怎么还能出现相同的插入数据:租借表
    姓名 班级 性别 借书数量(int类型)
    张三 一班 男 10
    李四 二班 女 7
    张三 二班 女 5
    李四 一班 男 3
    张三 一班 男 5
    归还表
    姓名 班级 性别 还书数量(int类型)
    张三 一班 男 9
    李四 二班 女 5
    张三 二班 女 2
    李四 一班 男 1
    张三 一班 男 3
      

  11.   

    --租借表
    go
    if object_id('租借表') is not null
    drop table 租借表
    go
    create table 租借表(
    姓名 varchar(20) not null,
    班级 varchar(20) not null,
    性别 varchar(5) check(性别 in('男','女')),
    借书数量 int default 0
    )
    go
    alter table 租借表 add constraint pk_name_class primary key(姓名,班级)
    go
    insert 租借表
    select '张三','一班','男',10 union all
    select '李四','二班','女',7 union all
    select '张三','二班','女',5 union all
    select '李四','一班','男',3 
    --归还表
    go
    if object_id('归还表') is not null
    drop table 归还表
    go
    create table 归还表(
    姓名 varchar(20) not null,
    班级 varchar(20) not null,
    性别 varchar(5) check(性别 in('男','女')),
    还书数量 int default 0
    )
    go
    alter table 归还表 add constraint pk_n_c primary key(姓名,班级)
    go
    insert 归还表
    select '张三','一班','男',9 union all
    select '李四','二班','女',5 union all
    select '张三','二班','女',2 union all
    select '李四','一班','男',1 
    select *from 归还表--查找现在所有人欠书本数为1-3本的且性别为女的查询结果
    --显示结果为:
    --姓名 班级 性别 仍欠数量select 
    租借表.姓名,租借表.班级,
    租借表.性别,(租借表.借书数量-归还表.还书数量) as 仍欠数量 
    from 
    租借表 inner join 归还表 
    on 
    租借表.姓名=归还表.姓名 and 租借表.班级=归还表.班级
    /*
    --结果表
    姓名    班级    性别  仍欠数量
    李四 二班 女   2
    李四 一班 男   2
    张三 二班 女   3
    张三 一班 男   1
    */