[英]Sql Pivot table with three cross tab and multiple columns dynamically
我有下表的值
CREATE TABLE stud
(
sname NVARCHAR(10),
hr NVARCHAR(30),
dt DATETIME,
att VARCHAR(3)
)
INSERT INTO stud VALUES ('Abi', '1', '21/01/2013','a')
INSERT INTO stud VALUES ('Abi', '2', '21/01/2013','p')
INSERT INTO stud VALUES ('bala', '1', '21/01/2013','p')
INSERT INTO stud VALUES ('bala', '2', '21/01/2013','a')
INSERT INTO stud VALUES ('bala', '1', '22/01/2013','od')
INSERT INTO stud VALUES ('bala', '2', '22/01/2013','ml')
INSERT INTO stud VALUES ('Abi', '1', '22/01/2013','ml')
INSERT INTO stud VALUES ('Abi', '2', '22/01/2013','od')
如果我選擇這個表,我得到的輸出為
SELECT *
FROM stud
sname hr dt att Abi 1 2013-01-21 00:00:00.000 a Abi 2 2013-01-21 00:00:00.000 p bala 1 2013-01-21 00:00:00.000 p bala 2 2013-01-21 00:00:00.000 a bala 1 2013-01-22 00:00:00.000 od bala 2 2013-01-22 00:00:00.000 ml Abi 1 2013-01-22 00:00:00.000 ml Abi 2 2013-01-22 00:00:00.000 od
但我希望在 ASP.NET 中的水晶報告中的輸出如下(注意:日期應該像from_date到 to_date一樣動態給出)
sname 21/01/2013 22/01/2013
我從漫長的日子里嘗試過這個輸出,但沒有得到輸出。
如果您使用的是 SQL Server 2005+,則可以通過多種方式應用PIVOT
函數。
您可以以靜態樞軸的形式對值進行硬編碼:
select *
from
(
select sname,
'hour_no_'+hr+'_'+convert(nvarchar(10), dt, 120) dt,
att
from stud
) st
pivot
(
max(att)
for dt in ([hour_no_1_2013-01-21], [hour_no_2_2013-01-21],
[hour_no_1_2013-01-22], [hour_no_2_2013-01-22])
) piv
或者您可以使用動態 sql 在運行時生成 sql 語句。 查詢的動態版本是:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols
= STUFF((SELECT ', ' + QUOTENAME('Hour_No_'+hr+'_'++convert(nvarchar(10), dt, 120))
from stud
group by hr, dt
order by dt, hr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT sname,' + @cols + ' from
(
select sname,
''hour_no_''+hr+''_''+convert(nvarchar(10), dt, 120) dt,
att
from stud
) x
pivot
(
max(att)
for dt in (' + @cols + ')
) p '
execute(@query)
請參閱SQL Fiddle with Demo 。
兩者都給出了結果:
| SNAME | HOUR_NO_1_2013-01-21 | HOUR_NO_2_2013-01-21 | HOUR_NO_1_2013-01-22 | HOUR_NO_2_2013-01-22 |
-----------------------------------------------------------------------------------------------------
| Abi | a | p | ml | od |
| bala | p | a | od | ml |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.