अपने इच्छित परिणाम में डेटा स्थानांतरित करने के लिए, आपको UNPIVOT दोनों का उपयोग करना होगा और PIVOT कार्य।
UNPIVOT फ़ंक्शन A लेता है और B कॉलम और परिणामों को पंक्तियों में परिवर्तित करता है। तब आप PIVOT . का उपयोग करेंगे day को बदलने का कार्य करता है कॉलम में मान:
select *
from
(
select day, col, value
from yourtable
unpivot
(
value
for col in (A, B)
) unpiv
) src
pivot
(
max(value)
for day in (Mon, Tue, Wed, Thu, Fri)
) piv
डेमो के साथ SQL Fiddle देखें।
यदि आप SQL Server 2008+ का उपयोग कर रहे हैं, तो आप CROSS APPLY . का उपयोग कर सकते हैं VALUES . के साथ डेटा को अनपिवट करने के लिए। आपका कोड निम्न में बदल जाएगा:
select *
from
(
select day, col, value
from yourtable
cross apply
(
values ('A', A),('B', B)
) c (col, value)
) src
pivot
(
max(value)
for day in (Mon, Tue, Wed, Thu, Fri)
) piv
डेमो के साथ SQL Fiddle देखें।
# 1 संपादित करें, अपनी वर्तमान क्वेरी को उपरोक्त समाधान में लागू करने से आप कुछ इसी तरह का उपयोग करेंगे:
select *
from
(
select LEFT(datename(dw,datetime),3) as DateWeek,
col,
value
from DataTable
cross apply
(
values ('A', ACalls), ('B', BCalls)
) c (col, value)
) src
pivot
(
sum(value)
for dateweek in (Mon, Tue, Wed, Thu, Fri)
) piv