如果他们有多个描述,我会得到重复的员工。试图让 MSG_Description 全部排成一行

I get Duplicates of employees if they have more than one Description. Trying to have the MSG_Description all in one row

--Declare  variables
DECLARE   @SQLQuery AS NVARCHAR(MAX)
DECLARE   @PivotColumns AS NVARCHAR(MAX)

--Get unique values of pivot column  
SELECT    @PivotColumns= COALESCE(@PivotColumns + ',','') + QUOTENAME(MSG_Description)
 from(select  MSG_Description From  MenuSecurityGroup  ) AS PivotExample 

SELECT  @PivotColumns 

--Create the dynamic query with all the values for 
--pivot column at runtime
SET   @SQLQuery = 
    N'SELECT  EMP_EmployeeID, EMP_LastName, EMP_FirstName, 
    EMP_EMailAddress,EMP_StatusCode, EMP_SFM_SupervisorConsole, 
    EMP_SFM_WorkCenterConsole, 
    EMP_SFM_SC_ProdAnalyzer ' +   @PivotColumns + '
    FROM [dbo].[EMP] 
    LEFT JOIN EmployeeMenuSecurityGroup EMSG on EMP.EMP_RecordID = EMSG.ESG_EMP_RecordID 
    LEFT JOIN MenuSecurityGroup MSG on EMSG.ESG_MSG_RecordID = MSG.MSG_RecordID 
    PIVOT( max(MSG_Description) 
          FOR MSG_Description IN (' + @PivotColumns + ')) AS P ' 

SELECT   @SQLQuery 
--Execute dynamic query
EXEC sp_executesql @SQLQuery

您只需在 PIVOT 之前添加派生的 table,并且只包含您希望在最终结果中看到的字段和您要 PIVOT 的字段。

SET @SQLQuery = N'
SELECT  EMP_EmployeeID, EMP_LastName, EMP_FirstName, 
        EMP_EMailAddress,EMP_StatusCode, EMP_SFM_SupervisorConsole, 
        EMP_SFM_WorkCenterConsole, EMP_SFM_SC_ProdAnalyzer,
        ' + @PivotColumns + '
FROM    (   SELECT  EMP_EmployeeID, EMP_LastName, EMP_FirstName, 
                    EMP_EMailAddress,EMP_StatusCode, EMP_SFM_SupervisorConsole, 
                    EMP_SFM_WorkCenterConsole, EMP_SFM_SC_ProdAnalyzer,
                    MSG_Description
            FROM    [dbo].[EMP] 
                    LEFT JOIN EmployeeMenuSecurityGroup EMSG on EMP.EMP_RecordID = EMSG.ESG_EMP_RecordID 
                    LEFT JOIN MenuSecurityGroup MSG on EMSG.ESG_MSG_RecordID = MSG.MSG_RecordID 
        ) t
PIVOT   (  
    MAX(MSG_Description) 
    FOR MSG_Description IN (' + @PivotColumns + ')
) p'