sql表透视
我试图做一个查询,返回每个员工整个月(30天)的结果。 数据如下:sql表透视,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我试图做一个查询,返回每个员工整个月(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 2
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 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 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)
您能提供完整的查询吗?为什么第26天和第27天的起始日期相同?2000-01-01