将行切换为列

时间:2013-08-19 12:22:16

标签: sql-server pivot

我有一张表proj_ctc_grp_usr:

USER_ID PROJ_ID CTC_GRP_ID
2          1     1
2          1     2
3          1     1
3          1     2
4          2     2

表** ctc_grp:**

CTC_GRP_ID     CTC_GRP_DS
1             Bank Contact
2            Dept2

表* 用户 *

USER_ID USER_FIRST_NM   USER_LST_NM
2          saravanakumar    rajkumar
3          Soosai           Antony
4          Adam           Allen

我使用以下查询:

SELECT  *
            FROM    (   SELECT PROJ.PROJ_ID,           
                                CTC_GRP_DS                               
                        FROM  dbo.Project PROJ  
                         left join dbo.PROJ_CTC_GRP_USER  PCGU on PROJ.PROJ_ID = PCGU.PROJ_ID
                         left join dbo.CTC_GRP CG on PCGU.CTC_GRP_ID = CG.CTC_GRP_ID
                    ) data

                    PIVOT
                    (   MAX(CTC_GRP_DS)
                        FOR CTC_GRP_DS IN ([Bank Contact],[Dept2])
                    ) pvt4

并低于输出......

PROJ_ID Bank Contact    Dept2
1   Bank Contact    Dept2
2   NULL              Dept2

我试图以下面的形式显示它......

PROJ_ID Bank Contact                          Dept2
1   saravanakumarRajkumar, soosaiAntony   saravanakumarRajkumar, soosaiAntony 
2   NULL                                    AllenAdam...

我试过了&结果没有运气......请帮忙...

2 个答案:

答案 0 :(得分:2)

要获得结果,您需要做一些事情。

首先,使用PIVOT的当前查询不正确。您正试图获取数据中每个MAX(CTC_GRP_DS)的{​​{1}}。您实际上想要为数据中的每个CTC_GRP_DS返回名称。

其次,您需要将名字和姓氏连接在一起,并且还要连接每个项目的名称列表。您可以使用CTC_GRP_DS进行此连接。

FOR XML PATH

请参阅SQL Fiddle with Demo

答案 1 :(得分:1)

你非常接近。但是,您在枢轴中的聚合函数应该是您在旋转后所需的值。因此,由于您在聚合和FOR中都使用CTC_GRP_DS,因此您最终将透视列名称作为值。希望您可以使用下面的查询。注意:您在查询中没有显示的项目表,因此您可能必须包含该表。

SELECT * FROM
(
    SELECT      
        p.[PROJ_ID]
        ,c.CTC_GRP_DS
    ,u.USER_FIRST_NM + ', ' + u.USER_LST_NM as UserName
    FROM [proj_ctc_grp_usr] p
    LEFT JOIN
        ctc_grp c
    ON
        p.CTC_GRP_ID = c.CTC_GRP_ID
    LEFT JOIN
        [User] u
    ON
        p.[User_ID] = u.[User_ID]
) d
PIVOT(
    MAX(UserName)
    FOR CTC_GRP_DS IN ([Bank Contact], Dept2)
)p