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

मैं टी-एसक्यूएल में एक्सएमएल कॉलम की विशेषताओं पर कैसे पिवट करूं?

इस डायनामिक पिवट पर एक नज़र डालें और हाल ही में यह वाला - आपको मूल रूप से SELECT DISTINCT FieldName . में सक्षम होना चाहिए अपनी क्वेरी को गतिशील रूप से बनाने के लिए इस तकनीक का उपयोग करने के लिए।

यहां आपकी विशेष समस्या का पूरा उत्तर दिया गया है (ध्यान दें कि कॉलम को किस क्रम में प्रदर्शित होना चाहिए, यह जानने में विशिष्ट विशेषताओं से सूची बनाते समय कॉलम ऑर्डर की कमजोरी होती है):

DECLARE @template AS varchar(MAX)
SET @template = 'SELECT 
    FormEntryId
    ,{@col_list}
    ,DateCreated 
FROM FormEntry'

DECLARE @col_template AS varchar(MAX)
SET @col_template = 'FormXML.value(''/Root[1]/Form[1]/FormData[@FieldName="{FieldName}"][1]/@FieldValue'',''varchar(max)'') AS {FieldName}'

DECLARE @col_list AS varchar(MAX)

;WITH FieldNames AS (
    SELECT DISTINCT FieldName
    FROM FormEntry
    CROSS APPLY (
        SELECT X.FieldName.value('@FieldName', 'varchar(255)')
        FROM FormXML.nodes('/Root[1]/Form[1]/FormData') AS X(FieldName)
    ) AS Y (FieldName)
)
SELECT @col_list = COALESCE(@col_list + ',', '') + REPLACE(@col_template, '{FieldName}', FieldName)
FROM FieldNames

DECLARE @sql AS varchar(MAX)
SET @sql = REPLACE(@template, '{@col_list}', @col_list)

EXEC (@sql)


  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 सर्वर प्रदर्शन बाधाओं के बारे में बात करना

  2. सर्वर से परिणाम प्राप्त करते समय एक परिवहन-स्तर त्रुटि उत्पन्न हुई

  3. SQL सर्वर में टूटी हुई वस्तुओं का पता लगाएं

  4. रैंकिंग कार्यों के साथ पुनरावर्ती सीटीई

  5. अपने SQL सर्वर संस्करण की जाँच कैसे करें