我有一张桌子
Select * from Table1.
如何将select写成表2?
日期范围由用户选择,而“小时”列是字符串类型。
实施例: 用户希望在2015年1月1日至2015年3月1日期间为每位员工报告小时数。 所以他输入了2015年1月1日(dateTime选择器)和TO 1.3.2015(dateTime选择器)。
答案 0 :(得分:1)
您可以使用PIVOT语法,使用MIN或MAX作为HOURS列的agregation,因为在这种情况下,它会为每个WORKER / DATE重新获取一个值。希望它适合你。
declare @str varchar(MAX)
declare @q varchar(MAX)
declare @fromDate date
declare @toDate date
set @fromDate ='2015-01-01'
set @toDate ='2015-03-01'
set @str=''
select @str = @str + '[' + cast(DATE as varchar) + '],'
from (select distinct DATE from Table1 where DATE between @fromDate and @toDate) as A
set @q =
'SELECT WORKER, '+left(@str,len(@str)-1)+'
FROM
(SELECT WORKER, DATE, HOURS
FROM Table1) p
PIVOT
(
MIN (HOURS)
FOR [DATE] IN
( '+left(@str,len(@str)-1)+' )
) AS pvt'
exec (@q)