स्तंभों को क्रमबद्ध करने का अपेक्षाकृत सरल तरीका यहां दिया गया है। अगर आप पहले अनपिवट करते हैं , सॉर्ट करें और पिवट आपका डेटा, आपको क्रमबद्ध कॉलम मिलेंगे।
यहां उदाहरण के साथ Sql Fiddle है ।
-- Assign arbitrary numbers to records
-- You might skip this part if you have unique column
-- in which case you should replace RecordNumber with this ID
; with numbered as
(
select *,
row_number() over (order by (select null)) RecordNumber
from test
),
-- Generate order by
-- For all the columns in record.
-- Rn will always be in range
-- 1..NumberOfColumns
-- Order is done on unpivoted data
ordered as
(
select *,
row_number() over (partition by RecordNumber
order by v desc) rn
from numbered
-- list all the columns here
-- v is for value
-- c is for column
unpivot (v for c in (c1, c2, c3)) u
)
-- Finally return the data in original layout
select RecordNumber,
[1] c1,
[2] c2,
[3] c3
from
(
-- Only the columns needed by the query
-- Pivot will not play nice even if you
-- Select only subset of columns in
-- outer query
select RecordNumber,
v,
Rn
from ordered
) o
-- Get value for row numbers 1..NumberOfColumns
pivot (min(v) for Rn in ([1], [2], [3])) p
आप हेडर पंक्तियों को जोड़ना चाह सकते हैं ताकि आपको पता चल सके कि कौन सा मान किस कॉलम से आता है। ऐसा करने के लिए मैं हेडर/पंक्ति की पहचान करने वाला एक कॉलम जोड़ूंगा, संघ सभी को o
संबंधित शीर्षलेख और क्रम प्राप्त करने के लिए जिससे यह सुनिश्चित हो सके कि ये दो पंक्तियाँ एक साथ रहें:
(
select RecordNumber,
v,
Rn,
1 HdrRow
from ordered
union all
select RecordNumber,
c, -- Column name is in c
Rn,
0 HdrRow
from ordered
) o
...
order by RecordNumber, HdrRow