यह वास्तव में के साथ बहुत आसानी से किया जा सकता है। PIVOT
समारोह। चूंकि अन्य उत्तर में इसे निष्पादित करने के तरीके से संबंधित कोड नहीं दिखाया गया है, यहां PIVOT
के दो तरीके दिए गए हैं आँकड़े।
पहला स्थिर धुरी . के साथ है . एक स्थिर धुरी तब होती है जब आप कॉलम में बदलने के लिए समय से पहले डेटा जानते हैं।
select *
from
(
select name, id, convert(char(5), dt, 101) dt, jobid, amount
from test
) x
pivot
(
sum(amount)
for dt in ([01/02], [02/02], [03/02], [04/05], [05/05])
)p
order by jobid, name
देखें SQL Fiddle with Demo
दूसरा तरीका है डायनामिक PIVOT . का उपयोग करना रन-टाइम पर कॉलम में बदलने के लिए मानों की पहचान करने के लिए।
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(char(5), dt, 101))
from test
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT name, id, ' + @cols + ', jobid from
(
select name, id, convert(char(5), dt, 101) dt, jobid, amount
from test
) x
pivot
(
sum(amount)
for dt in (' + @cols + ')
) p
order by jobid, name'
execute(@query)
देखें SQL Fiddle with Demo
दोनों समान परिणाम देंगे। जब आप कॉलम में कनवर्ट करने के लिए समय से पहले के मूल्यों को नहीं जानते हैं तो डायनामिक बहुत अच्छा काम करता है।