Sql server 所有这些都是为了让员工满意,以实际反映你所拥有的。然后,我将添加一个实际的ComplainId,它链接devemployeecomplainindtail表中特定员工投诉的所有记录。一旦你有了这个地方,你可以查询每一个投诉花了多长时间来解决。如果没有这一点
Sql server 所有这些都是为了让员工满意,以实际反映你所拥有的。然后,我将添加一个实际的ComplainId,它链接devemployeecomplainindtail表中特定员工投诉的所有记录。一旦你有了这个地方,你可以查询每一个投诉花了多长时间来解决。如果没有这一点,sql-server,database,Sql Server,Database,所有这些都是为了让员工满意,以实际反映你所拥有的。然后,我将添加一个实际的ComplainId,它链接devemployeecomplainindtail表中特定员工投诉的所有记录。一旦你有了这个地方,你可以查询每一个投诉花了多长时间来解决。如果没有这一点,如果员工有重叠的投诉得到解决,您就不能保证每个投诉都得到正确的时间。您的代码已经在计算时间:datediff(second,@progdate,@resdate)diff。什么不起作用? DevEmployee: EmployeeId Emp
所有这些都是为了让员工满意,以实际反映你所拥有的。然后,我将添加一个实际的ComplainId,它链接devemployeecomplainindtail表中特定员工投诉的所有记录。一旦你有了这个地方,你可以查询每一个投诉花了多长时间来解决。如果没有这一点,如果员工有重叠的投诉得到解决,您就不能保证每个投诉都得到正确的时间。您的代码已经在计算时间:
datediff(second,@progdate,@resdate)diff
。什么不起作用?
DevEmployee:
EmployeeId EmployeeName
1 Alex
2 Samson
3 Harry
4 Ronney
5 Stoinis
6 Joanna
7 Nicole
8 Fergusion
ComplainId Complainstatus
1 Open
2 In Progress
3 On Hold
4 Deferred
5 Escalate
6 Resolved
EmployeeId ComplainId ComplainCreatedDate
1 1 2019-01-18 00:00:00.000
1 2 2019-01-20 10:34:09.000
1 3 2119-01-20 05:14:01.110
2 1 2019-01-10 05:14:01.110
2 2 2019-01-11 08:34:01.000
2 3 2019-01-12 01:05:00.000
2 2 2019-01-13 03:07:20.700
2 4 2019-01-14 11:19:20.110
2 2 2019-01-15 12:09:10.110
2 6 2019-01-16 02:49:01.010
3 1 2019-04-22 10:06:12.100
DECLARE @i INT
DECLARE @j INT
DECLARE @lt INT
DECLARE @OnHold DATETIME
DECLARE @OnDeferred DATETIME
DECLARE @OnOpen DATETIME
DECLARE @OnProgress DATETIME
DECLARE @OnEscalate DATETIME
DECLARE @allcount INT
DECLARE @Employee INT
DECLARE @complain INT
DECLARE @date DATETIME
DECLARE @time INT = 0
DECLARE @resdate DATETIME
DECLARE @progdate DATETIME
DECLARE @Eid INT
DECLARE @diff DECIMAL
SET @i = 1
SET @lt = (
SELECT COUNT(*)
FROM (
SELECT MAX(ComplainCreatedDate) AS ResolveTime
,EmployeeId
FROM DevEmployeeDetail
WHERE complainId = 6
GROUP BY EmployeeId
) a
INNER JOIN (
SELECT MIN(ComplainCreatedDate) AS InProgressTime
,EmployeeId
FROM DevEmployeeDetail
WHERE complainId = 2
GROUP BY EmployeeId
) b ON a.EmployeeId = b.EmployeeId
)
WHILE @i <= @lt
BEGIN
SELECT TOP (@i) @eid = a.EmployeeId
,@resdate = a.ResolveTime
,@progdate = b.InProgressTime
FROM (
SELECT MAX(ComplainCreatedDate) AS ResolveTime
,EmployeeId
FROM DevEmployeeDetail
WHERE complainId = 6
GROUP BY EmployeeId
) a
INNER JOIN (
SELECT MIN(ComplainCreatedDate) AS InProgressTime
,EmployeeId
FROM DevEmployeeDetail
WHERE complainId = 2
GROUP BY EmployeeId
) b ON a.EmployeeId = b.EmployeeId
SET @j = 1
SET @allcount = (
SELECT count(*)
FROM DevEmployeeDetail
WHERE @eid = EmployeeId
AND ComplainCreatedDate > @progdate
AND ComplainCreatedDate < @resdate
)
WHILE @j <= @allcount
BEGIN
SELECT TOP (@j) @Employee = EmployeeId
,@complain = complainId
,@date = ComplainCreatedDate
FROM DevEmployeeDetail
WHERE @eid = EmployeeId
AND ComplainCreatedDate > @progdate
AND ComplainCreatedDate < @resdate
SET @j = @j + 1
IF @complain = 3
BEGIN
SET @OnHold = @date
END
IF @complain = 4
BEGIN
SET @OnDeferred = @date
END
IF @complain = 1
BEGIN
SET @OnOpen = @date
END
IF @complain = 5
BEGIN
SET @OnEscalate = @date
END
IF @complain = 2
BEGIN
SET @OnProgress = @date
END
SELECT @Employee EmployeeId
,@progdate InProgressDate
,@resdate ResolvedDate
,datediff(second, @progdate, @resdate) diff
,@complain STATUS
,@OnHold OnHold
,@OnDeferred OnDeferred
,@OnOpen OnOpen
,@OnEscalate OnEscalate
,@OnProgress OnProgress
SET @OnDeferred = NULL
SET @OnHold = NULL
SET @OnOpen = NULL
SET @OnProgress = NULL
SET @OnEscalate = NULL
END
SET @i = @i + 1
SELECT @Eid EmployeeId
,@progdate InProgressDate
,@resdate ResolvedDate
,@complain STATUS
,@OnHold OnHold
,@OnDeferred OnDeferred
,@OnOpen OnOpen
,@OnEscalate OnEscalate
,@OnProgress OnProgress
END;