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.