1.1 
select 学生号码 from 延时情况表 where 延时情况表.所属地=大连 and 延时情况表.处置<>完了    
--不知道你说的是不是这个意思,延时情况表是普通的一个表吧?
1.2
select 学生号码 from 欠款情况表 where 欠款情况表.所属地 = 大连 and 欠款情况表.学生号码 in (select 学生号码 from 延时情况表 where 延时情况表.所属地=大连 and 延时情况表.处置<>完了 ) and 欠款情况表.起始年>=2000 and 欠款情况表.终止年<=2005
--如果起始年终止年是日期型的,可用year()。另:你的延时情况表.所属地跟欠款情况表.所属地是不是严格对应的?如果是的话第二句可不加欠款情况表.所属地=大连

解决方案 »

  1.   

    1.2可以优化一下
    select 学生号码 from 欠款情况表 inner join 延时情况表 on 延时情况表.学生号码= 欠款情况表.学生号码 where 欠款情况表.所属地 = 大连 and 延时情况表.处置<>完了 and 欠款情况表.起始年>=2000 and 欠款情况表.终止年<=2005
      

  2.   

    下面的看起来都差不多,不知道我理解的有没有问题
    总的来说楼主应该可以避免用in 
    用inner join速度会更快一些
      

  3.   

    select 
        总共欠款 = isnull(sum(g.总共欠款)),
        回收欠款 = isnull(sum(g.回收欠款)),
        延期额   = isnull(sum(g.总共欠款),0)-isnull(sum(g.回收欠款),0),
        借款次数 = count(g.*)
    from 
        延时情况表 a,
        欠款情况表 b,
        负责者表   c,
        学生姓名表 d,
        事故原因   e,
        借款       f,
        借还款表   g
    where
        a.学生号码 = b.学生号码
        and
        b.学生号码 = c.学生号码
        and
        c.学生号码 = d.学生号码
        and
        d.学生号码 = e.学生号码
        and
        e.不还原因 = f.不还原因 
        and
        e.学生号码 = g.学生号码
        and
        a.所属地 = '大连' and a.处置 != '完了'
        and
        b.起始年>=2000 and b.终止年<=2005
        and
        c.负责者='小王'
        and
        d.所属地 = '大连' and d.姓名 like %姓名% and d.标记 = '1'
        and
        e.所属地 = 大连