Det er meget enkelt at tilføje disse kolonner. Den endelige forespørgsel ville være
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 tilføjet t2.AccountName til underforespørgslen, og Account and AccountName tilføjet til det indledende SELECT. Smid dem ind i build-erklæringen, og du er færdig:
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 '
Hvad angår SQL-injektion, er den eneste måde, jeg kan se, at det sker på, hvis nogen på en eller anden måde indlejrer ondsindet kode i Table1.Col_Name, og hvis du skal bekymre dig om det, har du større problemer end at "låse" denne dynamiske forespørgsel.
Også værd at nævne, jeg ville bruge følgende til at bygge listen over kolonner (@Cols), fordi den er kortere og lettere at læse, men mest fordi jeg ikke kan lide XML.
DECLARE @cols NVARCHAR(2000)
SELECT @cols = isnull(@cols + ',', '') + '[' + Col_Name + ']'
FROM Table1
ORDER BY Col_Name