【问题标题】:pivot table - date data rows to columns数据透视表 - 日期数据行到列
【发布时间】:2015-11-25 07:19:48
【问题描述】:

我有一个存储员工考勤(打卡和打卡)的 SQL 表,我目前正在努力将每天的总工作时间存储在表中(总天数最多约为 22 到 30 天) .. 存储的数据如下:

ID  date        time        Status
1   01/08/2015  08:00 AM    IN
1   01/08/2015  01:00 PM    OUT
1   01/08/2015  02:30 PM    IN
1   01/08/2015  07:30 PM    OUT
1   02/08/2015  11:00 AM    IN
1   02/08/2015  06:00 PM    OUT
1   02/08/2015  09:30 PM    IN
1   03/08/2015  02:30 AM    OUT
1   03/08/2015  08:00 AM    IN
1   03/08/2015  06:00 PM    OUT
1   04/08/2015  08:00 AM    IN
1   04/08/2015  06:00 PM    OUT

现在我希望数据如下所示:

ID  01/08/2015  02/08/2015  03/08/2015  04/08/2015  total
1       10          12          10          10      42
2       9           10          10          11      40

我已经阅读了很多关于数据透视表的文章,但它们都在其中使用特定数量的列,那么如何动态解决它?

【问题讨论】:

    标签: sql tsql pivot pivot-table dynamic-columns


    【解决方案1】:
    将 @cols 声明为 VARCHAR(MAX) 将@query 声明为 VARCHAR(MAX) 选择 @cols = STUFF((SELECT ',' + QUOTENAME( cast(CONVERT( VARCHAR(20), Edate,103 ) as varchar(10))) 从 ( 选择 a1.Edate from ( 选择不同的日期 从进出 )a1 ) 吨 FOR XML PATH(''), 类型 ).value('.', 'VARCHAR(MAX)') ,1,1,'') EXEC('SELECT Id,' + @cols + ' 从 ( 选择身份证, 编辑, 状态 从 ( 选择转换(varchar(20),Edate,103)Edate,Id,状态 从进出 ) 源代码 ) X 枢 ( 计数(状态) 对于 Edate in (' + @cols + ') ) p 其中 1=1 ')

    【讨论】:

    • 你好,pradip,这是一个可行的解决方案,它给出了在考勤表中分配的总天数作为列,但它没有返回每天的总工作时间,它给出了记录的计数每天:P anw 谢谢你回答我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 2016-04-23
    • 2015-12-27
    相关资源
    最近更新 更多