2017-10-18 95 views
1

请参阅下面的代码片段:枢轴在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 

正如你可以在上面看到,我想有串联的列名每个不同的项目名称(作为新列)。如果您需要任何其他详细信息,请告诉我。

+0

如何在EXEC_type定义PROJECT_TYPE订单? – qxg

+0

嗨,它出现的顺序并不重要。也许,现在,您可以通过TOTAL_HOURS排序 –

+0

[将多行连接成单个文本字符串?](https://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-文本字符串) – qxg

回答

2

只要使用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 
+0

感谢您的快速回复@Yogesh Sharma。有用。如果我遇到任何问题,请告诉你 –