Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में डायनेमिक कॉलम वाले पिवोट्स

उन कॉलम को जोड़ना बहुत आसान है। अंतिम प्रश्न होगा

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर BCP निर्यात जहाँ SQL फ़ील्ड में अल्पविराम है

  2. SSMS 2019 (v18) के लिए एक्सटेंशन कैसे बनाएं

  3. विशेष वर्णों की अनुमति दें SQL Server 2008

  4. डेटाटाइप परिवर्तन से बढ़ने वाली SQL सर्वर तालिका का आकार कैसे कम करें

  5. एमएसएसक्यूएल रेगुलर एक्सप्रेशन