sql - sql server 数据透视表查询
问题描述
我们正在尝试将考勤日志数据转换为数据透视表。为简单起见,实际数据采用以下形式:
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
关于枢轴有很多困惑,个人找不到太多教程。
我们如何告诉查询将数据放在新行中的依据是什么(例如在这种情况下,我们将如何告诉查询根据日期和员工ID分隔记录)
任何帮助表示赞赏
解决方案
您可以进行聚合:
SELECT aml.EnrollNumber, aml.A_Date,
MAX(CASE WHEN aml.InOutMode = 1 THEN aml.A_Time END),
MAX(CASE WHEN aml.InOutMode = 0 THEN aml.A_Time END)
FROM dbo.Attendence_Machines_LOG AS aml
GROUP BY aml.EnrollNumber, aml.A_Date;
编辑:问题编辑后:
SELECT aml.EnrollNumber, CAST(aml.A_Date AS DATE),
MAX(CASE WHEN aml.InOutMode = 1 THEN aml.A_Time END),
MAX(CASE WHEN aml.InOutMode = 0 THEN aml.A_Time END)
FROM dbo.Attendence_Machines_LOG AS aml
GROUP BY aml.EnrollNumber, CAST(aml.A_Date AS DATE);
推荐阅读
- amazon-web-services - SNS 发布到带有电话号码的主题不起作用
- kubernetes - 单个通配符证书的两个入口资源
- reactjs - 如何使用 webstomp-client 和 Spring Boot 设置心跳?
- java - 东方数据库升级导致 noSuchMethodError
- java - 如何在从数据源创建新连接之前执行自定义代码
- python - Dataframe 具有字符串列,其中包含不同格式的日期值。如何将整列数据转换为单个日期格式?
- android - Android 图片上传在 Localhost 但不在在线服务器上
- javascript - 在打字稿中声明对象中的所有属性相同类型?
- javascript - 如何对调用私有方法的公共方法进行单元测试
- java - 如何使用 DateTimeFormatter 从 MONTH("MMMM") 或 YEAR("yyyy") 获取日期对象