将行数据转换为SQL Server中的列

Dar*_*vil 4 sql sql-server rows multiple-columns

我有一个场景,其中我有三列多行,我需要在单行中选择它们.下面我附上临时表格场景.

CREATE TABLE #Temp
(
  PersonID INT ,
  PhoneType VARCHAR(20) ,
  PhoneNumber VARCHAR(20)
)

INSERT  INTO #Temp
    ( PersonID ,
      PhoneType ,
      PhoneNumber 
    )
    SELECT  1212 ,
            'Business' ,
            '123456789'
    UNION ALL
    SELECT  1212 ,
            'Cell' ,
            '741852963'
    UNION ALL
    SELECT  1212 ,
            'Other' ,
            '987654321'
    UNION ALL
    SELECT  1212 ,
            'Home' ,
            '951357852'

SELECT  *
FROM    #Temp

DROP TABLE #Temp
Run Code Online (Sandbox Code Playgroud)

我需要显示,

PersonID|Business|123456789|Cell|741852963|Other|987654321|Home|951357852
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

我必须将此结果与另一个Select Query相结合,我该怎么办?

ped*_*ram 6

您可以像下面这样使用PIVOT,

SELECT  *
FROM    #Temp
PIVOT(MAX(PhoneNumber) 
          FOR PhoneType IN ([Business],[Cell],[Other],[Home])) AS PVTTable
Run Code Online (Sandbox Code Playgroud)

或者我认为你想要下面的东西,

SELECT PersonID = STUFF((SELECT  PhoneType + ' | ' + PhoneNumber + ' | '
    FROM #Temp 
     ORDER BY PersonID
     FOR XML PATH('')), 1, 0, '')
FROM #Temp AS x
GROUP BY PersonID, PhoneType
ORDER BY PersonID;
Run Code Online (Sandbox Code Playgroud)

最后一个,

DECLARE @MainColumn AS NVARCHAR(MAX) = ''
SET @MainColumn = (SELECT  PersonID =  STUFF((SELECT PhoneType + ' | ' + PhoneNumber + ' | '
    FROM #Temp 
     ORDER BY PersonID
     FOR XML PATH('')), 1, 0, '')
FROM #Temp AS x
GROUP BY PersonID)

SELECT 'PersonID | ' + @MainColumn  AS FinalResult
Run Code Online (Sandbox Code Playgroud)