sql table pivot



我正在尝试进行查询,返回整个月(30 天)每个员工的结果。数据如下:

employeeID day DayDutyDate   fromTime                   Period
1           26  2014-03-26  2000-01-01 09:30:00.000     Time1
1           26  2014-03-26  2000-01-01 14:00:00.000     Time2
1           27  2014-03-27  2000-01-01 09:30:00.000     Time1
1           27  2014-03-26  2000-01-01 14:00:00.000     Time2

我正在按以下方式调整日期:

PIVOT ( MIN(fromtime) FOR days IN ( [26],[27]) (I am being breif not listing all month days right now)

结果如下:

EmployeeID 26                       27
1          2000-01-01 09:30:00.000  null
1          2000-01-01 14:00:00.000  null
1          null                     2000-01-01 09:30:00.000  
1          null                     2000-01-01 14:00:00.000

我需要的是:

EmployeeID 26                       27
1          2000-01-01 09:30:00.000  2000-01-01 09:30:00.000
1          2000-01-01 14:00:00.000  2000-01-01 14:00:00.000

知道吗?

此查询:

SELECT employeeID, [26], [27], Period
FROM 
(SELECT employeeID, [day], fromtime, Period
FROM #MyTable) p
PIVOT
(
MIN(fromtime)
FOR [day] IN
( [26], [27])
) AS pvt

生成以下输出:

employeeID  26                      27                     Period
==================================================================
1           2000-01-01 09:30:00.000 2000-01-01 09:30:00.000 Time1
1           2000-01-01 14:00:00.000 2000-01-01 14:00:00.000 Time2

您还可以使用动态 SQL 来透视数据。请参阅以下示例:

DECLARE @cols as varchar(max)
DECLARE @sql as varchar(max)
SELECT @cols  = coalesce(@cols  + ',','') + '[' + day + ']' FROM #MyTable
SET @sql = 
         'SELECT employeeID, ' + @cols + ', Period
           FROM (
                 SELECT employeeID, [day], fromtime, Period
                 FROM #MyTable
                 ) as P
           PIVOT 
                 (
                 MIN(fromtime)FOR [day] IN (' + @cols + ')
                 )AS pvt'
EXEC(@sql)

最新更新