【发布时间】:2018-04-22 21:12:27
【问题描述】:
我有一个看起来像这样的桌拳
EMP_ID INpunchDATETIME OUTpunchDATETIME
-----------------------------------------------
1 2017-11-10 11:59 2017-11-10 13:30
1 2017-11-10 9:00 2017-11-10 10:30
我需要从上一个表中创建一个表 @temptable,如下所示
Emp_ID InPunch1 InPunch2 OUTpunch1 OUTpunch2
----------------------------------------------------------------------------
1 2017-11-10 9:00 2017-11-10 11:59 2017-11-10 10:30 2017-11-10 13:30
我正在尝试使用 PIVOT,但如果错了我可以更改
DECLARE @temptable Table (
EMP_ID int,
InPunch1 datetime,
InPunch2 datetime,
OutPunch1 datetime,
OutPunch2 datetime);
SELECT
Emp_ID, InPunch1, InPunch2, Outpunch1, Outpunch2
INTO
@temptable
FROM
(SELECT
EMP_ID, INPunchDATETIME, OUTpunchDATETIME
FROM
punches) AS p
PIVOT
(
这就是我所知道的。
【问题讨论】:
-
我假设出拳次数是无限的?
-
我不确定 PIVOT 是您要找的东西:technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
-
这样的事情可能会起作用:选择前 1 个 p.Emp_ID,p2.InPunch 作为 Inpunch1,p.InPunch 作为 inpunch2,p2.Outpunch 作为 outpunch1,p.Outpunch 作为 outpunch2 FROM testing p INNER JOIN testing p2 ON p.EMP_ID = p2.EMP_ID AND p.INpunch p2.INpunch AND DAY(p.INpunch ) = DAY(p2.INpunch)
-
但是,您在 temptable 声明中有语法错误,需要充实问题描述,例如我假设这是试图跟踪拆分班次,但是,没有提到确保在同一天发生打卡/打卡等。
-
我试图让问题更通用,以便对其他人更有帮助。是的,我计划添加一些逻辑以确保所有的拳都发生在同一天。此外,我已经将数据保存在一个数据库中,需要发送到另一个数据库。发送数据库的格式类似于我的第一个示例,接收数据库的格式类似于第二个。
标签: tsql pivot sql-server-2014