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

एसक्यूएल सर्वर में पंक्तियों को कॉलम में कुशलतापूर्वक परिवर्तित करें

ऐसे कई तरीके हैं जिनसे आप कई पंक्तियों के डेटा को कॉलम में बदल सकते हैं।

PIVOT का उपयोग करना

SQL सर्वर में आप PIVOT . का उपयोग कर सकते हैं डेटा को पंक्तियों से कॉलम में बदलने के लिए कार्य करता है:

select Firstname, Amount, PostalCode, LastName, AccountNumber
from
(
  select value, columnname
  from yourtable
) d
pivot
(
  max(value)
  for columnname in (Firstname, Amount, PostalCode, LastName, AccountNumber)
) piv;

डेमो देखें।

अज्ञात संख्या में columnnames . के साथ पिवट करें

अगर आपके पास columnnames . की कोई अज्ञात संख्या है जिसे आप स्थानांतरित करना चाहते हैं, तो आप गतिशील SQL का उपयोग कर सकते हैं:

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

select @cols = STUFF((SELECT ',' + QUOTENAME(ColumnName) 
                    from yourtable
                    group by ColumnName, id
                    order by id
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = N'SELECT ' + @cols + N' from 
             (
                select value, ColumnName
                from yourtable
            ) x
            pivot 
            (
                max(value)
                for ColumnName in (' + @cols + N')
            ) p '

exec sp_executesql @query;

डेमो देखें।

एक समग्र फ़ंक्शन का उपयोग करना

यदि आप PIVOT . का उपयोग नहीं करना चाहते हैं फ़ंक्शन, तो आप एक CASE . के साथ एक समग्र फ़ंक्शन का उपयोग कर सकते हैं अभिव्यक्ति:

select
  max(case when columnname = 'FirstName' then value end) Firstname,
  max(case when columnname = 'Amount' then value end) Amount,
  max(case when columnname = 'PostalCode' then value end) PostalCode,
  max(case when columnname = 'LastName' then value end) LastName,
  max(case when columnname = 'AccountNumber' then value end) AccountNumber
from yourtable

डेमो देखें।

एकाधिक जॉइन का उपयोग करना

यह कई जॉइन का उपयोग करके भी पूरा किया जा सकता है, लेकिन आपको प्रत्येक पंक्ति को जोड़ने के लिए कुछ कॉलम की आवश्यकता होगी जो आपके नमूना डेटा में नहीं है। लेकिन मूल सिंटैक्स होगा:

select fn.value as FirstName,
  a.value as Amount,
  pc.value as PostalCode,
  ln.value as LastName,
  an.value as AccountNumber
from yourtable fn
left join yourtable a
  on fn.somecol = a.somecol
  and a.columnname = 'Amount'
left join yourtable pc
  on fn.somecol = pc.somecol
  and pc.columnname = 'PostalCode'
left join yourtable ln
  on fn.somecol = ln.somecol
  and ln.columnname = 'LastName'
left join yourtable an
  on fn.somecol = an.somecol
  and an.columnname = 'AccountNumber'
where fn.columnname = 'Firstname'


  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. उदाहरण के साथ SQL जॉइन प्रकारों का अवलोकन

  3. SQL सर्वर में FILE_ID() बनाम FILE_IDEX():क्या अंतर है?

  4. SQL सर्वर डेटाबेस को क्लाउड पर ले जाना

  5. एसक्यूएल क्रॉस जॉइन - इसके लिए किसी ने क्या उपयोग किया है?