使用动态标题将行转换为列 - SQL Server 2008

时间:2014-04-30 07:18:26

标签: sql-server-2008-r2

我有一组数据如下所示:

PatientID   Custodian
17          Parent1
17          Parent2
18          Parent1
18          Parent2
18          Parent3
19          Parent1

我希望输出为:

PatientID    Custodian 1         Custodian 2         Custodian 3
17           Parent1             Parent2
18           Parent1             Parent2             Parent3
19           Parent1

请为此编写SQL查询帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用PIVOT功能,但需要添加具有匹配的保管人ID的列。你可以在'custodian IN'部分使用一些动态SQL,但它可能会变得混乱。在PIVOT上有类似的东西:

CREATE TABLE #Temp
(
PatientID INT NOT NULL
,Custodian VARCHAR(10) NOT NULL
)

INSERT INTO #Temp
VALUES
(17,'Parent1')
,(17,'Parent2')
,(18,'Parent1')
,(18,'Parent2')
,(18,'Parent3')
,(19,'Parent1')

CREATE TABLE #Temp2
    (
    PatientID INT NOT NULL
    ,Parent VARCHAR(20) NOT NULL
    ,Custodian VARCHAR(20) NOT NULL
    )

INSERT INTO #Temp2
SELECT
    a.PatientID
    ,a.Custodian Parent
    ,'Custodian' + SUBSTRING(Custodian,7,10) Custodian
FROM #Temp a

SELECT *
FROM #Temp2 a (NOLOCK)
PIVOT (
    MAX(Parent)
    FOR Custodian IN ([Custodian1],[Custodian2],[Custodian3]))
    AS ParentID

DROP TABLE #Temp
DROP TABLE #Temp2