कई तरीके हैं जिनसे आप कई पंक्तियों के डेटा को कॉलम में बदल सकते हैं।
का उपयोग करते हुए 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'
cross join
बजाय उपयोग कर सकते हैंleft join
क्योंकि प्रत्येक उपश्रेणी एक पंक्ति में वापस आती है।