2017-02-09 11 views
0

- 私は、次の表を持っている:行 - だけでSQLを学ぶSQL 2008

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

と列と行を変換する必要があり、新しい列名「サーバー名」を追加し、列に行を変更以下を返す:

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

誰でもこれを手伝うことができますか?

ありがとう

+0

'PIVOT'はありませんこの。可能性のあるステータス値が不明な場合は、このサイトで*動的ピボット*を検索してください。 –

+0

Site1と合計が列見出しですか? – balaji

答えて

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

EDIT
あなたが動的サイト1列から値をロードする必要がある場合は、このようにそれを行うことができます。

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

パーフェクト:)ありがとう – MikeD

関連する問題