我有一個表SQL數據透視表(日期字符串)
Select * from Table1.
我怎麼能寫選擇看起來像表2?
日期範圍是由用戶選擇的和時間列是字符串類型。
示例: 用戶希望在2015年1月1日至2015年1月15日之間爲每位工作人員提供小時報告。 因此,他輸入FROM 1.1.2015(dateTime選擇器)和TO 1.3.2015(dateTime選擇器)。
我有一個表SQL數據透視表(日期字符串)
Select * from Table1.
我怎麼能寫選擇看起來像表2?
日期範圍是由用戶選擇的和時間列是字符串類型。
示例: 用戶希望在2015年1月1日至2015年1月15日之間爲每位工作人員提供小時報告。 因此,他輸入FROM 1.1.2015(dateTime選擇器)和TO 1.3.2015(dateTime選擇器)。
您可以通過使用MIN或MAX作爲HOURS列的聚合來使用PIVOT語法,因爲在這種情況下,它會爲每個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)
哪個RDBMS是這樣的?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –
對不起,用於MS SQL – hurikhan