Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 行到列-sql 2008_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 行到列-sql 2008

Sql server 行到列-sql 2008,sql-server,sql-server-2008,Sql Server,Sql Server 2008,正在学习SQL-我有下表: Site1 Totals Status1 20 Status2 5 Status3 15 Status4 145 Status5 1 并且需要转换列和行,添加新列名“Server name”并将行更改为列,以返回以下内容: Server name Status1 Status2 Status3 Status4 Status5 Site1 20 5 15 145 1 有人能帮忙吗

正在学习SQL-我有下表:

Site1   Totals 
Status1 20 
Status2 5 
Status3 15 
Status4 145 
Status5 1
并且需要转换列和行,添加新列名“Server name”并将行更改为列,以返回以下内容:

Server name   Status1  Status2  Status3 Status4 Status5
Site1            20      5        15      145      1
有人能帮忙吗

谢谢

select ServerName = 'Site1', *
from
(
  select Totals, Site1
  from Sometable
) d
pivot
(
  max(Totals)
  for Site1 in (Status1, Status2, Status3, Status4, Status5)
) piv;
编辑
如果需要从Site1列动态加载值,可以通过以下方式执行:

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;

PIVOT
会执行此操作。如果有未知数量的可能状态值,请搜索此站点以获取动态数据透视。Site1和Totals是否为您的列标题?完美:)谢谢