在 SQL 服务器中使用列连接进行透视

Pivot with Column Concatenation in SQL Server

请看下面的代码片段:

 DROP TABLE IF EXISTS PROJECT_DETAILS;
CREATE TABLE PROJECT_DETAILS
(
    PROJECT_NAME NVARCHAR(20),
    PROJECT_TYPE NVARCHAR(20),
    TOTAL_HOURS INT
);

INSERT INTO PROJECT_DETAILS VALUES('ProjectA','AU',100)
INSERT INTO PROJECT_DETAILS VALUES('ProjectA','SGP',50)
INSERT INTO PROJECT_DETAILS VALUES('ProjectA','NZ',75)
INSERT INTO PROJECT_DETAILS VALUES('ProjectB','US',200)
INSERT INTO PROJECT_DETAILS VALUES('ProjectB','CAN',100)
INSERT INTO PROJECT_DETAILS VALUES('ProjectC','JP',120)
INSERT INTO PROJECT_DETAILS VALUES('ProjectD','IND',100)
INSERT INTO PROJECT_DETAILS VALUES('ProjectD','CH',80)
INSERT INTO PROJECT_DETAILS VALUES('ProjectE','RSA',90)
INSERT INTO PROJECT_DETAILS VALUES('ProjectE','KEN',30)

期望的输出

PROEJCT_NAME    PROJECT_TYPE    EXEC_TYPE   TOTAL_HRS
ProjectA        AU              AU-SGP-NZ   100
ProjectA        SGP             AU-SGP-NZ   50
ProjectA        NZ              AU-SGP-NZ   75
ProjectB        US              US-CAN      200
ProjectB        CAN             US-CAN      100
ProjectC        JP              JP          120
ProjectD        IND             IND-CH      100
ProjectD        CH              IND-CH      80
ProjectE        RSA             RSA-KEN     90
ProjectE        KEN             RSA-KEN     30

正如您在上面看到的,我希望将每个不同项目名称的列名称连接起来(作为一个新列)。如果您需要任何其他详细信息,请告诉我。

只需将 STUFFXML 一起使用即可在单行中显示数据(无需 PIVOT):

SELECT P.PROJECT_NAME,
       P.PROJECT_TYPE,
       [EXEC_TYPE] = STUFF(
                          (
                              SELECT 
                                     '-'+PROJECT_TYPE
                              FROM PROJECT_DETAILS
                              WHERE PROJECT_NAME = P.PROJECT_NAME FOR XML PATH('')
                          ), 1, 1, ''),
       P.TOTAL_HOURS
FROM PROJECT_DETAILS P;

输出:

PROEJCT_NAME    PROJECT_TYPE    EXEC_TYPE   TOTAL_HRS
ProjectA        AU              AU-SGP-NZ   100
ProjectA        SGP             AU-SGP-NZ   50
ProjectA        NZ              AU-SGP-NZ   75
ProjectB        US              US-CAN      200
ProjectB        CAN             US-CAN      100
ProjectC        JP              JP          120
ProjectD        IND             IND-CH      100
ProjectD        CH              IND-CH      80
ProjectE        RSA             RSA-KEN     90
ProjectE        KEN             RSA-KEN     30