Skemaopsætning :
opret tabelhistorik (dato datetime, navn varchar(10), værdi int); indsæt historikværdier ('20130101', 'bruger1', 123), ('20130101', 'bruger2', 124), ('20130101', 'bruger3', 125), ('20130102', 'bruger1', 223), ('20130102', 'bruger3', 223), ('20130103', 'bruger2', 323); farver (navn varchar(10), farvenavn varchar(10)); indsæt farveværdier ('bruger1', 'blå'), ('bruger2', 'grøn'), ('bruger3', 'brun');
Forespørgsel :
DECLARE @scols nvarchar(max), @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);vælg @cols =TING(( SELECT ',' + QUOTENAME(C.Name) from ( vælg et særskilt navn fra [Historie]) KORDER EFTER C.Navn FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'');vælg @scols =TING(( VÆLG ',' + QUOTENAME(Navn) + ' AS ' + QUOTENAME(farve_Navn) fra (vælg distinkt c.navn, x.farve_navn fra [Historie] C JOIN farver x på x.navn =c.navn) y ORDER BY Name FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'');set @query =' SELECT [Dato],' + @ scols +' fra ( vælg [Dato], Navn, Værdi fra [Historie] ) x pivot ( max(værdi) for Navn i (' + @cols + ') ) p ';-- udskriv @forespørgsel --<
| DATO | BLÅ | GRØN | BRUN |------------------------------------------------ --------------| 1. januar 2013 00:00:00+0000 | 123 | 124 | 125 || 2. januar 2013 00:00:00+0000 | 223 | (nul) | 223 || 3. januar 2013 00:00:00+0000 | (nul) | 323 | (null) |