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 北京 擦桌子
问:这个查询语句怎么写呢?
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 北京 擦桌子
问:这个查询语句怎么写呢?
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'
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
也就是说:姓张的人在2012年内做过两次以上的家务的记录(即要求E有重复,C在2012年内,B为姓张的人的记录)
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
试试
改
B='张三'
为
B like '%张'
改
B='张三'
为
B like '张%'
提示 OVER附近有语法错误!
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 北京 擦桌子
*/
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 '张%'
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楼上面加个限制