Sql 将列值合并为一行

Sql 将列值合并为一行,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有一个具有这种结构的平板电脑: Usr Key Value Peter Address 78 Street Peter Number 123456 Peter Sport Rugby Peter Document ABCDE 我想询问一下: NAME Address Number Sport Document Peter 78 Street 123456 Rugby ABCDE 谁能帮我? 如果每个用户的每个键只有一个值

我有一个具有这种结构的平板电脑:

Usr    Key        Value
Peter   Address    78 Street
Peter   Number     123456
Peter   Sport      Rugby
Peter   Document   ABCDE
我想询问一下:

NAME  Address   Number Sport Document
Peter 78 Street 123456 Rugby ABCDE
谁能帮我?

如果每个用户的每个键只有一个值:

select P.*
from Table1 as t
pivot (
    max(Value)
    for [Key] in ([Address], [Number], [Sport], [Document])
) as P

有关PIVOT语句的更多信息,请查看此页。至于你的问题,这里有一个例子可以说明如何做到:

--create temp table and populate it
SELECT 'NAME' AS [KEY], 'Peter' AS VALUE
INTO #tmp
UNION ALL
SELECT 'Address' AS [KEY], '78' AS VALUE
UNION ALL
SELECT 'Number' AS [KEY], '1' AS VALUE
UNION ALL
SELECT 'Sport' AS [KEY], 'Rugby' AS VALUE
UNION ALL
SELECT 'Document' AS [KEY], 'qwretz' AS VALUE

--check what's in here
SELECT [KEY], VALUE FROM #tmp

--pivot
SELECT [NAME], [Address], [Number], [Sport], [DOCUMENT]
FROM
( SELECT [KEY], VALUE FROM #tmp) AS SourceTable
PIVOT
( MAX(VALUE)
FOR [KEY] IN ([NAME], [Address], [Number], [Sport], [DOCUMENT])
) AS PivotTable

谷歌:“SQL Server Pivot”。我不知道如何使用服务器Pivot。你能帮帮我吗?终极版太完美了!非常感谢。
--create temp table and populate it
SELECT 'NAME' AS [KEY], 'Peter' AS VALUE
INTO #tmp
UNION ALL
SELECT 'Address' AS [KEY], '78' AS VALUE
UNION ALL
SELECT 'Number' AS [KEY], '1' AS VALUE
UNION ALL
SELECT 'Sport' AS [KEY], 'Rugby' AS VALUE
UNION ALL
SELECT 'Document' AS [KEY], 'qwretz' AS VALUE

--check what's in here
SELECT [KEY], VALUE FROM #tmp

--pivot
SELECT [NAME], [Address], [Number], [Sport], [DOCUMENT]
FROM
( SELECT [KEY], VALUE FROM #tmp) AS SourceTable
PIVOT
( MAX(VALUE)
FOR [KEY] IN ([NAME], [Address], [Number], [Sport], [DOCUMENT])
) AS PivotTable