sql >> Database teknologi >  >> RDS >> Sqlserver

Skift kolonnenavn dynamisk i sql

SQL Fiddle

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 --< 

Resultater :

| 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) |

  1. output, der har første og sidste bogstav som vokal(a,e,i,o,u)

  2. Oracle Unicode-spooling

  3. Kan ikke oprette forbindelse til MySQL 4.1+ ved hjælp af gammel godkendelse

  4. Tre nemme SQL Server Performance-gevinster