【发布时间】:2019-07-22 07:13:28
【问题描述】:
我们正在尝试将考勤日志数据转换为数据透视表。为简单起见,实际数据格式为:
EmployeeId, InOrOut, DateTime
1 0 2019-01-01 08:00:00
1 1 2019-01-01 17:00:00
1 0 2019-01-02 08:00:00
1 1 2019-01-02 17:00:00
2 0 2019-01-01 08:00:00
2 1 2019-01-01 17:00:00
我们需要这样:
EmployeeId, Date, InTime , OutTime
1 2019-01-01 08:00 17:00
1 2019-01-02 08:00 17:00
2 2019-01-01 08:00 17:00
但是我们所做的查询似乎不是这样工作的。查询如下:
SELECT * FROM
(
SELECT aml.EnrollNumber, aml.A_Date, aml.InOutMode, aml.A_Time
FROM dbo.Attendence_Machines_LOG aml) AS AttendanceTable
PIVOT (
max(A_Date)
FOR InOutMode in ([1],[0])
) as PivotTable
关于pivot有很多困惑,个人找不到太多教程。
我们如何告诉查询将数据放在新行中的依据(例如,在这种情况下,我们将如何告诉查询根据日期和员工ID分隔记录)
任何帮助表示赞赏
【问题讨论】:
-
您能发布示例数据和所需的输出吗?
-
当然.. 已添加 2 个示例 :)
-
它不是一个支点。 Pivot 意味着将行数据转换为列名。 @Yogesh Sharma 给你一个很好的答案。赞成。
-
我认为您需要首先获取每个日期的所有时间记录,然后将每个日期的第一条记录显示为“in”,将最后一条记录显示为“out”。
标签: sql sql-server tsql pivot