SQL SERVER 2000 表:TB 字段 A,B,C,D,EA                     B               C                   D              E
0001                  张三           2011-09-11          北京           拖地                   
0002                  李四           2011-09-12          上海           洗碗                  
0003                  张三           2012-09-13          上海           擦桌子                  
0004                  李四           2011-09-10          北京           洗衣服                  
0005                  张三           2012-09-16          北京           洗碗                  
0006                  李四           2010-09-10          上海           擦桌子                
0007                  张三           2011-09-10          天津           洗碗               
0008                  张三           2012-09-10          北京           擦桌子                  
0009                  李四           2012-09-10          上海           洗碗               怎么通过查询得到:张三在2012年内做过两次以上的家务的记录(即要求E有重复,C在2012年内,B为张三的记录)
显示结果影为:
A                     B               C                   D              E
0003                  张三           2012-09-13          上海           擦桌子                  
0008                  张三           2012-09-10          北京           擦桌子                               
问:这个查询语句怎么写呢?

解决方案 »

  1.   

    select * from tb t
    where exists(select 1 from tb where b=t.b and year(c)=t.year(c) and e=t.e)
    and c between '2012-1-1' and '2012-12-31'
      

  2.   


    declare @t table (A varchar(4),B varchar(4),C Datetime,D varchar(4),E varchar(6))
    insert into @t values('0001', '张三' ,'2011-09-11', '北京','拖地' )
    insert into @t values('0002', '李四' ,'2011-09-12', '上海','洗碗' )
    insert into @t values('0003', '张三' ,'2012-09-13', '上海','擦桌子' )
    insert into @t values('0004', '李四' ,'2011-09-10', '北京','洗衣服' )
    insert into @t values('0005', '张三' ,'2012-09-16', '北京','洗碗' )
    insert into @t values('0006', '李四' ,'2010-09-10', '上海','擦桌子' )
    insert into @t values('0007', '张三' ,'2011-09-10', '天津','洗碗' )
    insert into @t values('0008', '张三' ,'2012-09-10', '北京','擦桌子' )
    insert into @t values('0009', '李四' ,'2012-09-10', '上海','洗碗' )
    select A,B,CONVERT(varchar(10),C,120),D,E from @t where B='张三' and E='擦桌子' and YEAR(C)=2012
      

  3.   

     where B='张三' and E='擦桌子' and YEAR(C)=2012,这个E字段是要求是重复的,不是特定的‘擦桌子’
      

  4.   

    还有就是不一定是张三,是张姓的
    也就是说:姓张的人在2012年内做过两次以上的家务的记录(即要求E有重复,C在2012年内,B为姓张的人的记录)
      

  5.   

    declare @t table (A varchar(4),B varchar(4),C Datetime,D varchar(4),E varchar(6))
    insert into @t values('0001', '张三' ,'2011-09-11', '北京','拖地' )
    insert into @t values('0002', '李四' ,'2011-09-12', '上海','洗碗' )
    insert into @t values('0003', '张三' ,'2012-09-13', '上海','擦桌子' )
    insert into @t values('0004', '李四' ,'2011-09-10', '北京','洗衣服' )
    insert into @t values('0005', '张三' ,'2012-09-16', '北京','洗碗' )
    insert into @t values('0006', '李四' ,'2010-09-10', '上海','擦桌子' )
    insert into @t values('0007', '张三' ,'2011-09-10', '天津','洗碗' )
    insert into @t values('0008', '张三' ,'2012-09-10', '北京','擦桌子' )
    insert into @t values('0009', '李四' ,'2012-09-10', '上海','洗碗' )
    select * from @t t1 inner join (
    select A,COUNT(*) OVER(partition by E) cou
    from @t t2
    where B='张三'
    and C Between '2012-01-01' and '2012-12-31'
    ) t2 on t1.A=t2.A and t2.cou>1
    试试
      

  6.   

    姓张 就

    B='张三'

    B like '%张'
      

  7.   

    错了,呵呵

    B='张三'

    B like '张%'
      

  8.   


    提示 OVER附近有语法错误!
      

  9.   

    declare @t table (A varchar(4),B varchar(4),C Datetime,D varchar(4),E varchar(6))
     insert into @t values('0001', '张三' ,'2011-09-11', '北京','拖地' )
     insert into @t values('0002', '李四' ,'2011-09-12', '上海','洗碗' )
     insert into @t values('0003', '张三' ,'2012-09-13', '上海','擦桌子' )
     insert into @t values('0004', '李四' ,'2011-09-10', '北京','洗衣服' )
     insert into @t values('0005', '张三' ,'2012-09-16', '北京','洗碗' )
     insert into @t values('0006', '李四' ,'2010-09-10', '上海','擦桌子' )
     insert into @t values('0007', '张三' ,'2011-09-10', '天津','洗碗' )
     insert into @t values('0008', '张三' ,'2012-09-10', '北京','擦桌子' )
     insert into @t values('0009', '李四' ,'2012-09-10', '上海','洗碗' )
     SELECT * FROM @t a
     WHERE EXISTS (SELECT 1 FROM (
     SELECT E FROM @t WHERE b='张三' AND c BETWEEN '2012-01-01' AND '2012-12-31' 
     GROUP BY E
     HAVING COUNT(1)>1  )b WHERE a.e=b.e)
     AND b='张三'
     /*
     A    B    C                       D    E
     ---- ---- ----------------------- ---- ------
     0003 张三   2012-09-13 00:00:00.000 上海   擦桌子
     0008 张三   2012-09-10 00:00:00.000 北京   擦桌子
     */
      

  10.   

    declare @t table (A varchar(4),B varchar(4),C Datetime,D varchar(4),E varchar(6))
     insert into @t values('0001', '张三' ,'2011-09-11', '北京','拖地' )
     insert into @t values('0002', '李四' ,'2011-09-12', '上海','洗碗' )
     insert into @t values('0003', '张三' ,'2012-09-13', '上海','擦桌子' )
     insert into @t values('0004', '李四' ,'2011-09-10', '北京','洗衣服' )
     insert into @t values('0005', '张三' ,'2012-09-16', '北京','洗碗' )
     insert into @t values('0006', '李四' ,'2010-09-10', '上海','擦桌子' )
     insert into @t values('0007', '张三' ,'2011-09-10', '天津','洗碗' )
     insert into @t values('0008', '张三' ,'2012-09-10', '北京','擦桌子' )
     insert into @t values('0009', '李四' ,'2012-09-10', '上海','洗碗' )
     SELECT * FROM @t a
     WHERE EXISTS (SELECT 1 FROM (
     SELECT E FROM @t WHERE b LIKE '张%' AND c BETWEEN '2012-01-01' AND '2012-12-31' 
     GROUP BY E
     HAVING COUNT(1)>1  )b WHERE a.e=b.e)
     AND b LIKE '张%'
      

  11.   

    declare @t table (A varchar(4),B varchar(4),C Datetime,D varchar(4),E varchar(6))
    insert into @t values('0001', '张三' ,'2011-09-11', '北京','拖地' )
    insert into @t values('0002', '李四' ,'2011-09-12', '上海','洗碗' )
    insert into @t values('0003', '张三' ,'2012-09-13', '上海','擦桌子' )
    insert into @t values('0004', '李四' ,'2011-09-10', '北京','洗衣服' )
    insert into @t values('0005', '张三' ,'2012-09-16', '北京','洗碗' )
    insert into @t values('0006', '李四' ,'2010-09-10', '上海','擦桌子' )
    insert into @t values('0007', '张三' ,'2011-09-10', '天津','洗碗' )
    insert into @t values('0008', '张三' ,'2012-09-10', '北京','擦桌子' )
    insert into @t values('0009', '李四' ,'2012-09-10', '上海','洗碗' )
    select * from @t t1 where exists(
    select 1 from(
    select E from
     @t t2
     where B='张三'
     and C Between '2012-01-01' and '2012-12-31' GROUP BY E HAVING COUNT(E)>1
     ) t3 where t3.E=t1.E)
     and B='张三'
     and C Between '2012-01-01' and '2012-12-31'
    感觉还要11楼上面加个限制