2017-02-09 3 views
0

ich lerne SQL - Ich habe die folgende Tabelle:Zeilen zu Spalten - SQL 2008

Site1 Totals 
Status1 20 
Status2 5 
Status3 15 
Status4 145 
Status5 1 

Und müssen die Spalten und Zeilen konvertieren, einen neuen Spaltennamen „Servername“ Hinzufügen und Ändern der Zeilen in Spalten , um folgendes zurückzugeben:

Server name Status1 Status2 Status3 Status4 Status5 
Site1   20  5  15  145  1 

Kann jemand dabei helfen?

Thankyou

+0

'PIVOT' tut Dies. Wenn eine unbekannte Anzahl möglicher Statuswerte vorhanden ist, durchsuchen Sie diese Site nach * dynamic pivot *. –

+0

Sind Site1 und Summen Ihre Spaltenüberschriften? – balaji

Antwort

0
select ServerName = 'Site1', * 
from 
(
    select Totals, Site1 
    from Sometable 
) d 
pivot 
(
    max(Totals) 
    for Site1 in (Status1, Status2, Status3, Status4, Status5) 
) piv; 

EDIT:
Wenn Sie dynamisch Werte von Standort1 Spalte laden Sie es auf diese Weise tun:

CREATE table #yourtable 
    ([Site1] varchar(20), [Totals] int) 
; 

INSERT INTO #yourtable 
    ([Site1], [Totals]) 
VALUES 
    ('Status1', 20), 
    ('Status2', 45), 
    ('Status3', 77), 
    ('Status4', 55) 
; 


DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + QUOTENAME(Site1) 
        from #yourtable 
        group by Site1 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = N'SELECT ServerName=''Site1'', ' + @cols + N' from 
      (
       select Site1, Totals 
       from #yourtable 
      ) x 
      pivot 
      (
       max(Totals) 
       for Site1 in (' + @cols + N') 
      ) p ' 

exec sp_executesql @query; 

DEMO

+0

Perfekt :) Danke – MikeD