SQL Server 2008 में आप PIVOT क्वेरी के साथ इस कार्य को बहुत आसानी से संभाल सकते हैं। निम्न उदाहरण आपके डेटा को निम्न प्रारूप में प्राप्त करने पर निर्भर करता है (जो ऐसा लगता है कि आप पहले ही कर चुके हैं):
Name Month Value
---------- ------- -----
District 1 Month 1 10
District 1 Month 2 5
District 1 Month 3 6
District 2 Month 1 1
District 2 Month 2 2
District 2 Month 3 3
District 3 Month 1 8
District 3 Month 2 6
District 3 Month 3 11
अगर आप ऐसा कर सकते हैं, तो आपकी PIVOT क्वेरी कुछ इस तरह दिखनी चाहिए:
DECLARE @myTable AS TABLE([Name] VARCHAR(20), [Month] VARCHAR(20), [Value] INT)
INSERT INTO @myTable VALUES ('District 1', 'Month 1', 10)
INSERT INTO @myTable VALUES ('District 1', 'Month 2', 5)
INSERT INTO @myTable VALUES ('District 1', 'Month 3', 6)
INSERT INTO @myTable VALUES ('District 2', 'Month 1', 1)
INSERT INTO @myTable VALUES ('District 2', 'Month 2', 2)
INSERT INTO @myTable VALUES ('District 2', 'Month 3', 3)
INSERT INTO @myTable VALUES ('District 3', 'Month 1', 8)
INSERT INTO @myTable VALUES ('District 3', 'Month 2', 6)
INSERT INTO @myTable VALUES ('District 3', 'Month 3', 11)
SELECT [Name], [Month 1], [Month 2], [Month 3], [NameTotalValue] AS [Total]
FROM
(
SELECT [Name], [Month], [Value],
SUM([Value]) OVER (PARTITION BY [Name]) as [NameTotalValue]
FROM @myTable
UNION
SELECT 'Total', [Month], SUM([Value]), (SELECT SUM([Value]) FROM @myTable)
FROM @myTable
GROUP BY [Month]
) t
PIVOT
(
SUM([Value]) FOR [Month] IN ([Month 1], [Month 2], [Month 3])
) AS pvt
ORDER BY pvt.[Name]
इस उदाहरण में, मैंने SUM([Value]) OVER PARTITION
. का उपयोग किया है प्रत्येक जिले के लिए रकम प्राप्त करने के लिए, और फिर मैंने नीचे की ओर कुल पंक्ति जोड़ने के लिए एक यूनियन किया। परिणाम इस तरह दिखते हैं:
Name Month 1 Month 2 Month 3 Total
----------- ------- ------- ------- -----
District 1 10 5 6 21
District 2 1 2 3 6
District 3 8 6 11 25
Total 19 13 20 52
इस दृष्टिकोण के बारे में एक बात आप देखेंगे कि आपको समय से पहले तालिका के शीर्ष पर इच्छित कॉलम नामों को जानना होगा। यदि आप रिपोर्ट को पूरे एक वर्ष तक चलाने के लिए सेट अप कर रहे हैं, तो यह करना आसान है, लेकिन यदि स्तंभों की संख्या में परिवर्तन होने वाला है तो यह अधिक कठिन है। यदि आप उपयोगकर्ताओं को एक कस्टम दिनांक सीमा (यानी, 07/2011-10/2011 या 06/2011-11/2011) निर्दिष्ट करने की अनुमति देने जा रहे हैं, तो उस आवश्यकता को संभालने का एक तरीका गतिशील SQL का उपयोग करके PIVOT क्वेरी बनाना है और फिर इसे sp_executesql के साथ निष्पादित करें ।