根据某个字段的不同 where的条件也同
字段有 LoginName,WorkEndTime工作结束时间,SetTime 期限,WorkSate状态(处理中,待办,已处理,办结)
select LoginName,count(*) as st from ccrm_service as cs where 。。。。。。。。
加个条件,完成查询(如果WorkState 为 处理中或待办 状态 则 使用条件 为时间段1<SetTime ,SetTime>时间段2 ,如果WorkState 为已处理,或办结 则表面工作已完成 使用的where条件为 WorkEndTime>时间段1 , WorkEndTime<时间段2)
似乎要 在SQL 语句中用到 if else ,求详细说明。
1 IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE id=OBJECT_ID(N'tempdb..#ccrm_service') AND type='U') 2 DROP TABLE #ccrm_service 3 ELSE 4 CREATE TABLE #ccrm_service 5 ( 6 ID INT IDENTITY(1,1) NOT NULL, 7 LoginName VARCHAR(50) NOT NULL, 8 WorkEndTime DATETIME NOT NULL, 9 SetTime DATETIME NOT NULL, 10 WorkState INT NOT NULL --1处理中,2待办,3已处理,4办结 11 ) 12 DECLARE @i INT 13 SET @i=0 14 WHILE(@i<1000) 15 BEGIN 16 INSERT INTO #ccrm_service VALUES(CAST(CEILING(RAND()*4) AS VARCHAR(2)),DATEADD(DAY,-@i,GETDATE()),DATEADD(DAY,-@i,GETDATE()),CAST(CEILING(RAND()*4) AS INT)) 17 SET @i=@i+1 18 END 19 SELECT LoginName,SUM(Total) Total 20 FROM( 21 SELECT LoginName,COUNT(*) AS Total FROM #ccrm_service WHERE WorkState IN(1,2) AND SetTime>'2012-05-05' AND SetTime<'2012-10-10' GROUP BY LoginName 22 UNION 23 SELECT LoginName,COUNT(*) AS Total FROM #ccrm_service WHERE WorkState IN(1,2) AND WorkEndTime>'2012-05-05' AND WorkEndTime<'2012-10-10' GROUP BY LoginName 24 ) 25 AS tb 26 GROUP BY LoginName
一楼那样也可以,也可以用UNION
非常感谢!不知道很多地方 加# 是什么意思?
@Shang0109: 临时表,因为我本地没有你那表的环境,所以就弄了个临时表
#ccrm_service
where ((WorkSate='处理中' or WorkSate='待办' ) and 时间段1<SetTime and SetTime>时间段2) or ((WorkState='已处理' or WorkState='办结') and WorkEndTime>时间段1 and WorkEndTime<时间段2)
这个我尝试了,但没有查出结果。
非常感谢!这个我尝试了,但没有查出结果。
@Shang0109:
应该可以吧,你去掉一些条件调一调,看是怎么出不来。