菜鸟求一条sql语句。(90)

  • 主题发起人 wanglong
  • 开始时间
W

wanglong

Unregistered / Unconfirmed
GUEST, unregistred user!
我的一个表:姓名 年度 是否合格刘德华 2007 不合格刘德华 2008 合格张学友 2007 不合格张学友 2008 不合格我想查出2007和2008连续两年都没有合格的人的名单,怎么查呢??高手帮忙啊!!
 
select 姓名 from T1where 是否合格='不合格'and 年度 in ('2007','2008')group by 姓名having count(*)>1
 
LS的似乎没有结果,试试下面的语句:Select rst.姓名, rst.年度, rst.是否合格 From (Select m.姓名, m.年度, m.是否合格, Sum(r.cs) cs From 表 m, (Select 姓名, Count(年度) cs From 表 Where 年度 = 2008 and 是否合格 = '不合格' Group By 姓名 Union All Select 姓名, Count(年度) cs From 表 Where 年度 = 2007 and 是否合格 = '不合格' Group By 姓名) r Where m.姓名 = r.姓名 and m.是否合格 = '不合格' Group By m.姓名, m.年度, m.是否合格) rst Where rst.cs > 1总觉得有更简洁的方法,期待高人出现。
 
我在 wangdonghai 的基础上改了一下:Select a.姓名, a.年度, a.是否合格 From 表 a, (Select 姓名, Count(*) From 表 Where 是否合格 = '不合格' and 年度 in (2007, 2008) Group By 姓名 Having Count(*) > 1) b Where a.姓名 = b.姓名这样貌似简洁些。
 
wangdonghai的方法是可以的测试如下: create table #temp(stuName nvarchar(20),stuYear nvarchar(4),stuIsOK nvarchar(1))insert into #temp values('xxx','2007','1')insert into #temp values('xxx','2008','0')insert into #temp values('yyy','2007','0')insert into #temp values('yyy','2008','0')select stuName from #tempwhere stuYear in ('2007','2008') and stuIsOK='0'group by stuNamehaving count(*)>1drop table #temp--------结果------------- strName1 yyy
 
都有问题吧?年份是否一定要连续(2006,2008不及格是否算?)?上面的写法都是针对别人的具体数据来查的,如果这样何必查?直接就张学友得了,呵呵
 
比较通用的算法(不管是那些年都可以的):select a.姓名,a.年度 开始年度,b.年度 结束年度from (select * from 表 where 是否合格='不合格') ainner join (select * from 表 where 是否合格='不合格') bon a.年度+1=b.年度
 
多人接受答案了。
 

Similar threads

回复
0
查看
864
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部