2015-08-31 50 views
0

我有一個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 

我讀了很多有關的文章數據透視表,但他們都使用其中的特定數量的列,所以如何解決它動態嗎?

回答

2
 
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 ') 
+0

hello pradip,這是一個可行的解決方案,它給出了出席表中分配的總天數作爲列,但它並沒有返回總工作時間,它給出了每個記錄的計數一天:謝謝你回答我 –