Menambahkan kolom tersebut sangat sederhana. Permintaan terakhir adalah
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
yang memiliki t2.AccountName ditambahkan ke subquery, dan Account dan AccountName ditambahkan ke SELECT awal. Masukkan mereka ke dalam pernyataan build dan Anda selesai:
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 '
Adapun injeksi SQL, satu-satunya cara saya dapat melihat hal itu terjadi adalah jika seseorang entah bagaimana menyematkan kode berbahaya dalam Table1.Col_Name, dan jika Anda harus mengkhawatirkannya, Anda memiliki masalah yang lebih besar daripada "mengunci" kueri dinamis ini.
Juga perlu disebutkan, saya akan menggunakan yang berikut ini untuk membuat daftar kolom (@Cols) karena lebih pendek dan lebih mudah dibaca, tetapi sebagian besar karena saya tidak suka XML.
DECLARE @cols NVARCHAR(2000)
SELECT @cols = isnull(@cols + ',', '') + '[' + Col_Name + ']'
FROM Table1
ORDER BY Col_Name