• Sorry I know it's spoon feeding already. I've exerted all efforts but cant find the right script. I was thinking to put a "NULL" value to the columns that lacks so that i could be able to union. but the problem is i dont know where. :sick:

    this is the part that i dont really understand. specially to the part where you put ".value". if you could walk me through on what it does that would be a GREAT HELP.

    STUFF((SELECT CHAR(13)+CHAR(10)+'Union All SELECT '+Dyn

    FROM (SELECT [book]

    FROM CTE

    GROUP BY [book]

    )a

    CROSS APPLY (SELECT STUFF((SELECT ','+CHAR(13)+CHAR(10)+

    CHAR(39)+ b.[Category_Name]+CHAR(39)+ ' AS ' +

    CASE WHEN b.[book] = b.[Category_Name] THEN '[Book]'

    ELSE '[Level ' +CAST(b.[Pos] AS VARCHAR(3))+']'

    END

    FROM CTE b

    WHERE a.[book] = b.[book]

    ORDER BY [book], [Pos]

    FOR XML PATH(''), TYPE

    ).value('.','NVARCHAR(MAX)'),1,1,''

    )

    )ca(Dyn)

    FOR XML PATH(''), TYPE

    ).value('.','NVARCHAR(MAX)'),1,12,''

    );