我有一张表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...
我试过了&结果没有运气......请帮忙...
答案 0 :(得分:2)
要获得结果,您需要做一些事情。
首先,使用PIVOT的当前查询不正确。您正试图获取数据中每个MAX(CTC_GRP_DS)
的{{1}}。您实际上想要为数据中的每个CTC_GRP_DS
返回名称。
其次,您需要将名字和姓氏连接在一起,并且还要连接每个项目的名称列表。您可以使用CTC_GRP_DS
进行此连接。
FOR XML PATH
答案 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