Att lägga till dessa kolumner är väldigt enkelt. Den sista frågan skulle vara
SELECT Account, AccountName, [Feb-11],[Jan-11],[Mar-11] FROM
(SELECT
t1.Col_Name,
t2.Account,
t2.AccountName,
t2.Amount
FROM Table1 AS t1
JOIN Table2 AS t2 ON t1.Col_ID1 = t2.Col_ID2
) p
PIVOT
(
Sum ([Amount] )
FOR Col_Name IN
( [Feb-11],[Jan-11],[Mar-11] )
) AS pvt
som har lagt till t2.AccountName i underfrågan, och Account och AccountName lagt till i den initiala SELECT. Kasta dem i build-satsen och du är klar:
DECLARE @query NVARCHAR(4000)
SET @query = N'SELECT Account, AccountName, ' + @cols +' FROM
(SELECT
t1.Col_Name,
t2.Account,
t2.AccountName,
t2.Amount
FROM Table1 AS t1
JOIN Table2 AS t2 ON t1.Col_ID1 = t2.Col_ID2
) p
PIVOT
(
Sum ([Amount] )
FOR Col_Name IN
( '+
@cols +' )
) AS pvt '
När det gäller SQL-injektion, det enda sättet jag kan se att det händer är om någon på något sätt bäddar in skadlig kod i Table1.Col_Name, och om du behöver oroa dig för det har du större problem än att "låsa" den här dynamiska frågan.
Också värt att nämna, jag skulle använda följande för att bygga listan med kolumner (@Cols) eftersom den är kortare och lättare att läsa, men mest för att jag inte gillar XML.
DECLARE @cols NVARCHAR(2000)
SELECT @cols = isnull(@cols + ',', '') + '[' + Col_Name + ']'
FROM Table1
ORDER BY Col_Name