मान लें कि आप SQL Server 2005 या इसके बाद के संस्करण का उपयोग कर रहे हैं, यहाँ कोड है:
DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)
SELECT @cols = STUFF(( SELECT distinct ',' + QuoteName(cast([status] as varchar))
FROM LogTable FOR XML PATH('') ), 1, 1, '')
SET @sqlquery = 'SELECT * FROM
(SELECT UserIndex, [status]
FROM LogTable ) base
PIVOT (Count(status) FOR [status]
IN (' + @cols + ')) AS finalpivot'
EXECUTE ( @sqlquery )
इससे कोई फर्क नहीं पड़ता कि आपके पास कितनी अलग स्थिति है। यह गतिशील रूप से PIVOT
. के साथ एक क्वेरी को असेंबल करता है ।
अपडेट करें
जैसा कि @JonH ने बताया, मेरे द्वारा पोस्ट किए गए कोड में एक भेद्यता थी, जिससे इंजेक्शन का हमला संभव हो गया। इसे अब QUOTENAME का उपयोग करके ठीक किया गया है कॉलम नाम बनाते समय।
अन्य उदाहरण: