Sql server 2008 t-sql我正在转换数据
我正在转换此旧表中的数据: MovTime(IdMov INT,IdPerson NVARCHAR(20),Date1 datetime,Type1 NVARCHAR(30))Sql server 2008 t-sql我正在转换数据,sql-server-2008,tsql,Sql Server 2008,Tsql,我正在转换此旧表中的数据: MovTime(IdMov INT,IdPerson NVARCHAR(20),Date1 datetime,Type1 NVARCHAR(30)) IdMov IdPerson Date1 Type ----------- -------------------- ----------------------- ------------------------------ 1
IdMov IdPerson Date1 Type
----------- -------------------- ----------------------- ------------------------------
1 David 2012-06-01 09:00:00.000 Entered
2 David 2012-06-01 12:30:00.000 Exit
3 David 2012-06-01 14:00:00.000 Entered
4 David 2012-06-01 18:30:00.000 Exit
5 Kim 2012-06-02 09:00:00.000 Entered
6 Kim 2012-06-02 12:00:00.000 Exit
。。。我希望结果如下:
IdPerson Data Total Time
---------- ---------- ----------
David 2012-06-01 08:00:00
Kim 2012-06-02 03:00:00
T-SQL
有人能帮我吗?假设任何班次都不能超过24小时(例如,延长到第二天),并且存在一些限制,阻止没有相应输入/输出的行:
;WITH x AS
(
SELECT IdPerson, Date1, Type1, rn = ROW_NUMBER()
OVER (PARTITION BY IdPerson ORDER BY Date1)
FROM @WK_TABLE
)
SELECT
x.IdPerson, [Data] = CONVERT(DATE, x.Date1),
[Total Time] = CONVERT(TIME(0), DATEADD(MINUTE,
SUM(DATEDIFF(MINUTE, x.Date1, x2.Date1)), '00:00:00'))
FROM x INNER JOIN x AS x2
ON x.IdPerson = x2.IdPerson
AND x.rn = x2.rn - 1
AND x.TYpe1 = 'Entered' AND x2.type1 = 'Exit'
GROUP BY x.IdPerson, CONVERT(DATE, x.Date1)
ORDER BY [Data], IdPerson;
假设任何班次都不能超过24小时(例如,延长到第二天),并且存在一些限制,阻止没有相应输入/输出的行:
;WITH x AS
(
SELECT IdPerson, Date1, Type1, rn = ROW_NUMBER()
OVER (PARTITION BY IdPerson ORDER BY Date1)
FROM @WK_TABLE
)
SELECT
x.IdPerson, [Data] = CONVERT(DATE, x.Date1),
[Total Time] = CONVERT(TIME(0), DATEADD(MINUTE,
SUM(DATEDIFF(MINUTE, x.Date1, x2.Date1)), '00:00:00'))
FROM x INNER JOIN x AS x2
ON x.IdPerson = x2.IdPerson
AND x.rn = x2.rn - 1
AND x.TYpe1 = 'Entered' AND x2.type1 = 'Exit'
GROUP BY x.IdPerson, CONVERT(DATE, x.Date1)
ORDER BY [Data], IdPerson;
如果您有一行输入但没有相应的退出,会发生什么?如果您有一行输入但没有相应的退出,会发生什么?非常感谢亚伦;)。工作100%@Pankaj什么是匆忙?也许会有更好的答案。非常感谢亚伦;)。工作100%@Pankaj什么是匆忙?也许会有更好的答案。