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

स्तंभ शीर्षलेख के लिए MSSQL गतिशील पिवट स्तंभ मान

आपकी वर्तमान क्वेरी में समस्या लाइन के साथ है:

MAX(SERVER_ID)

आप PROPERTY_CHAR_VAL प्रदर्शित करना चाहते हैं प्रत्येक PROPERTY_NAME . के लिए बजाय। SERVER_ID एक कॉलम के रूप में अंतिम परिणाम का हिस्सा होगा।

कभी-कभी जब आप PIVOT के साथ काम कर रहे होते हैं, तो पहले कोड को हार्ड-कोडेड मानों के साथ लिखना आसान होता है:

select id, name1, name2, name3, name4
from
(
  select id, property_name, property_value
  from yourtable
) d
pivot
(
  max(property_value)
  for property_name in (name1, name2, name3, name4)
) piv;

देखें SQL Fiddle with Demo

एक बार आपके पास एक ऐसा संस्करण है जिसमें सही तर्क है, तो आप परिणाम प्राप्त करने के लिए इसे गतिशील SQL में परिवर्तित कर सकते हैं। यह एक sql स्ट्रिंग बनाएगा जिसे निष्पादित किया जाएगा और इसमें आपके सभी नए कॉलम नाम शामिल होंगे।

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(PROPERTY_NAME) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT id, ' + @cols + ' 
            from 
            (
              select id, property_name, property_value
              from yourtable
            ) x
            pivot 
            (
                max(property_value)
                for property_name in (' + @cols + ')
            ) p '

execute sp_executesql @query;

देखें SQL Fiddle with Demo . दोनों एक परिणाम देंगे:

| ID |  NAME1 |  NAME2 |  NAME3 |  NAME4 |  NAME6 |
|----|--------|--------|--------|--------|--------|
|  1 |  value |  value |  value | (null) | (null) |
|  2 | (null) |  value | (null) |  value | (null) |
|  3 | (null) | (null) | (null) | (null) |  value |



  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 सर्वर से कैसे जुड़ें (पंजीकृत सर्वर समूह) - SQL सर्वर / TSQL ट्यूटोरियल भाग 5

  2. क्या एक INNER JOIN EXISTS से बेहतर प्रदर्शन की पेशकश कर सकता है

  3. SQL सर्वर, पायथन और OS X

  4. SQL सर्वर में SA लॉगिन पर पासवर्ड बदलें (T-SQL उदाहरण)

  5. SQL सर्वर (T-SQL) में प्राथमिक कुंजी का नाम बदलें