• Thanks for the reply. Actually the column names are not fixed. They can vary, plus I can not make changes to any table schema. So, here is the working query that I have created:

    DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)

    DECLARE @ColumnName AS NVARCHAR(MAX)

    SELECT @ColumnName = ISNULL(@ColumnName + ',', '') + QUOTENAME([moduleName])

    FROM (

    SELECT DISTINCT [moduleName]

    FROM #ApplicationModules

    ) AS ApplicationModules

    SET @DynamicPivotQuery = '

    SELECT * FROM

    (

    SELECT D.[moduleId], D.[moduleName], U.[UserName] AS [User] FROM

    #ApplicationUsers U

    LEFT OUTER JOIN #ModuleAccess DA

    ON U.[userId] = DA.[userId]

    LEFT OUTER JOIN #ApplicationModules D

    ON D.[moduleId] = DA.[moduleId]

    ) A

    pivot (MIN(moduleId)for [moduleName] in (' + @ColumnName + ')) as [moduleIdId]

    '

    EXEC sp_executesql @DynamicPivotQuery

    DROP TABLE #ApplicationUsers

    DROP TABLE #ModuleAccess

    DROP TABLE #ApplicationModules

    Thanks again.