उन कॉलम को जोड़ना बहुत आसान है। अंतिम प्रश्न होगा
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
जिसमें t2.AccountName सबक्वेरी में जोड़ा गया है, और खाता और खातानाम प्रारंभिक चयन में जोड़ा गया है। उन्हें बिल्ड स्टेटमेंट में टॉस करें और आपका काम हो गया:
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 '
जहां तक SQL इंजेक्शन का सवाल है, मैं यह देख सकता हूं कि ऐसा हो रहा है, अगर कोई व्यक्ति किसी तरह से तालिका 1 के भीतर दुर्भावनापूर्ण कोड एम्बेड करता है।>
यह भी ध्यान देने योग्य है, मैं कॉलम (@Cols) की सूची बनाने के लिए निम्नलिखित का उपयोग करूंगा क्योंकि यह छोटा और पढ़ने में आसान है, लेकिन ज्यादातर इसलिए कि मुझे XML पसंद नहीं है।
DECLARE @cols NVARCHAR(2000)
SELECT @cols = isnull(@cols + ',', '') + '[' + Col_Name + ']'
FROM Table1
ORDER BY Col_Name