आप कोशिश कर रहे हैं PIVOT
आँकड़े। SQL सर्वर में एक PIVOT
होता है फ़ंक्शन जो आपके लिए यह कर सकता है। PIVOT
करने के लिए आपको यह तय करने की आवश्यकता है कि किस समग्र कार्य का उपयोग करना है। मेरे नमूने में, मैंने MAX()
. का उपयोग किया है लेकिन आप SUM()
. का उपयोग कर सकते हैं , आदि
यदि आपके पास पिवट फ़ंक्शन नहीं है तो आप CASE
. के साथ एक समग्र फ़ंक्शन का उपयोग कर सकते हैं ऐसा करने के लिए बयान।
एग्रीगेट/केस संस्करण: इस संस्करण के लिए आवश्यक है कि आप सभी नामों को कॉलम में हार्ड-कोड करें।
select
max(case when name = 'Engineering' then rating end) Engineering,
max(case when name = 'Financials' then rating end) Financials,
max(case when name = 'Scope' then rating end) Scope,
max(case when name = 'Schedule' then rating end) Schedule,
max(case when name = 'Risks' then rating end) Risks,
max(case when name = 'People' then rating end) People
from yourtable
देखें SQL Fiddle with Demo
स्थिर PIVOT संस्करण: आप इस क्वेरी में नामों के मानों को हार्ड कोड करेंगे
select *
from
(
select name, rating
from yourtable
) src
pivot
(
max(rating)
for name in ([Engineering], [Financials], [Scope],
[Schedule], [Risks], [People])
) piv
देखें SQL Fiddle with Demo
यदि आपके पास स्तंभों की ज्ञात संख्या है, लेकिन यदि आपका name
. है तो उपरोक्त संस्करण बहुत अच्छा काम करते हैं मान अज्ञात हैं, तो आप डायनेमिक sql का उपयोग PIVOT
. में कर सकते हैं डेटा।
गतिशील PIVOT संस्करण:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Name)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + ' from
(
select name, rating
from yourtable
) x
pivot
(
max(rating)
for name in (' + @cols + ')
) p '
execute(@query)
देखें SQL Fiddle with Demo
तीनों संस्करण समान परिणाम देंगे:
| ENGINEERING | FINANCIALS | SCOPE | SCHEDULE | RISKS | PEOPLE |
----------------------------------------------------------------
| 1 | 3 | 1 | 2 | 3 | 3 |