यदि आप SQL Server 2005+ का उपयोग कर रहे हैं, तो आप PIVOT
. का उपयोग कर सकते हैं डेटा को पंक्तियों से कॉलम में बदलने के लिए कार्य करता है।
ऐसा लगता है कि यदि सप्ताह अज्ञात हैं तो आपको गतिशील एसक्यूएल का उपयोग करने की आवश्यकता होगी, लेकिन शुरुआत में हार्ड-कोडेड संस्करण का उपयोग करके सही कोड देखना आसान है।
सबसे पहले, यहाँ कुछ त्वरित तालिका परिभाषाएँ और उपयोग के लिए डेटा हैं:
CREATE TABLE yt
(
[Store] int,
[Week] int,
[xCount] int
);
INSERT INTO yt
(
[Store],
[Week], [xCount]
)
VALUES
(102, 1, 96),
(101, 1, 138),
(105, 1, 37),
(109, 1, 59),
(101, 2, 282),
(102, 2, 212),
(105, 2, 78),
(109, 2, 97),
(105, 3, 60),
(102, 3, 123),
(101, 3, 220),
(109, 3, 87);
यदि आपके मान ज्ञात हैं, तो आप क्वेरी को हार्ड-कोड करेंगे:
select *
from
(
select store, week, xCount
from yt
) src
pivot
(
sum(xcount)
for week in ([1], [2], [3])
) piv;
SQL डेमो देखें
फिर यदि आपको गतिशील रूप से सप्ताह संख्या उत्पन्न करने की आवश्यकता है, तो आपका कोड होगा:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Week)
from yt
group by Week
order by Week
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT store,' + @cols + ' from
(
select store, week, xCount
from yt
) x
pivot
(
sum(xCount)
for week in (' + @cols + ')
) p '
execute(@query);
SQL डेमो देखें।
गतिशील संस्करण, week
. की सूची तैयार करता है संख्याएं जिन्हें कॉलम में परिवर्तित किया जाना चाहिए। दोनों एक ही परिणाम देते हैं:
| STORE | 1 | 2 | 3 |
---------------------------
| 101 | 138 | 282 | 220 |
| 102 | 96 | 212 | 123 |
| 105 | 37 | 78 | 60 |
| 109 | 59 | 97 | 87 |