Sql 数据透视表-日期数据行到列
我有一个存储员工考勤打卡和打卡的SQL表,我目前正在努力获取存储在该表中的每天总工作时间。总天数最多约为22到30天。。 存储的数据如下所示:Sql 数据透视表-日期数据行到列,sql,tsql,pivot,pivot-table,dynamic-columns,Sql,Tsql,Pivot,Pivot Table,Dynamic Columns,我有一个存储员工考勤打卡和打卡的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 1
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
现在我希望数据如下所示:
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
我读过很多关于pivot表的文章,但是所有的pivot表都使用了特定数量的列,所以如何动态求解?hello pradip,这是一个可行的解决方案,它将考勤表中分配的总天数作为列,但它不返回每天的总工作时间,它给出了每天的记录:谢谢你回答我 DECLARE @cols AS VARCHAR(MAX) DECLARE @query AS VARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME( cast(CONVERT( VARCHAR(20), Edate,103 ) as varchar(10))) from ( select a1.Edate from ( SELECT DISTINCT Edate from InOut )a1 ) t FOR XML PATH(''), TYPE ).value('.', 'VARCHAR(MAX)') ,1,1,'') EXEC( ' SELECT Id,' + @cols + ' from ( select Id, Edate , status from ( select convert(varchar(20), Edate,103)Edate, Id,status from InOut ) src ) x pivot ( count(status) for Edate in (' + @cols + ') ) p where 1=1 ')