चूंकि आप डेटा के एक से अधिक कॉलम को पिवट करना चाहते हैं, इसलिए मैं सबसे पहले result
. को अनपिवोट करने का सुझाव दूंगा , score
और grade
कॉलम ताकि आपके पास एकाधिक कॉलम न हों लेकिन आपके पास एकाधिक पंक्तियां होंगी।
SQL सर्वर के आपके संस्करण के आधार पर आप UNPIVOT फ़ंक्शन या CROSS APPLY का उपयोग कर सकते हैं। डेटा को अनपिवट करने का सिंटैक्स निम्न के समान होगा:
select ratio, col, value
from GRAND_TOTALS
cross apply
(
select 'result', cast(result as varchar(10)) union all
select 'score', cast(score as varchar(10)) union all
select 'grade', grade
) c(col, value)
डेमो के साथ SQL Fiddle देखें। एक बार जब डेटा अप्रकाशित हो जाता है, तो आप PIVOT फ़ंक्शन लागू कर सकते हैं:
select ratio = col,
[current ratio], [gearing ratio], [performance ratio], total
from
(
select ratio, col, value
from GRAND_TOTALS
cross apply
(
select 'result', cast(result as varchar(10)) union all
select 'score', cast(score as varchar(10)) union all
select 'grade', grade
) c(col, value)
) d
pivot
(
max(value)
for ratio in ([current ratio], [gearing ratio], [performance ratio], total)
) piv;
डेमो के साथ SQL Fiddle देखें। यह आपको परिणाम देगा:
| RATIO | CURRENT RATIO | GEARING RATIO | PERFORMANCE RATIO | TOTAL |
|--------|---------------|---------------|-------------------|-----------|
| grade | Good | Good | Satisfactory | Good |
| result | 1.29400 | 0.33840 | 0.04270 | (null) |
| score | 60.00000 | 70.00000 | 50.00000 | 180.00000 |