आपका डेटा पहले से ही पिवट किया गया है, लेकिन इसे एक अलग स्तर पर पिवोट करने की आवश्यकता है। मुझे लगता है कि इसे संभालने का सबसे अच्छा तरीका यह है कि पहले इसे अनपिवट किया जाए, फिर सही पिवट लेवल सेकेंड को हैंडल किया जाए।
चरण 1:अनपिवट करें
आप SQL 2005 UNPIVOT का उपयोग कर सकते हैं कमांड, या क्रॉस जॉइन तकनीक का उपयोग करें। यहां दोनों के उदाहरण दिए गए हैं। नोट मैंने चीजों को सरल रखने के लिए बीच में महीनों को छोड़ दिया। बस उन्हें इसमें जोड़ें।
-- CROSS JOIN method (also works in SQL 2000)
SELECT
P.Project,
Mo =
DateAdd(mm,
X.MonthNum,
DateAdd(yy, P.[Year] - 1900, '19000101')
),
Amount =
CASE X.MonthNum
WHEN 0 THEN Jan
WHEN 1 THEN Feb
WHEN 11 THEN Dec
END
FROM
ProjectData P
CROSS JOIN (
SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 11
) X (MonthNum)
प्रत्येक पंक्ति को 12 बार दोहराया जाता है, फिर एक CASE कथन प्रत्येक पंक्ति के लिए केवल एक महीने का समय निकालता है, जिससे डेटा अच्छी तरह से अप्रकाशित हो जाता है।
-- UNPIVOT method
SELECT
P.Project,
Mo =
DateAdd(mm,
Convert(int, P.MonthNum),
DateAdd(yy, P.[Year] - 1900, '19000101')
),
P.Amount
FROM
(
SELECT Project, [Year], [0] = Jan, [1] = Feb, [11] = Dec
FROM ProjectData
) X UNPIVOT (Amount FOR MonthNum IN ([0], [1], [11])) P
DROP TABLE ProjectData
कोई भी तरीका हर समय स्पष्ट प्रदर्शन विजेता नहीं होता है। कभी-कभी एक दूसरे से बेहतर काम करता है (यह इस बात पर निर्भर करता है कि डेटा पिवोट किया जा रहा है)। UNPIVOT विधि निष्पादन योजना में एक फ़िल्टर का उपयोग करती है जो क्रॉस जॉइन नहीं करता है।
चरण 2:फिर से पिवट करें
अब, अप्रकाशित डेटा का उपयोग कैसे करें। आपने यह नहीं बताया कि आपका कोई . कैसा है इसका उपभोग करेंगे, लेकिन चूंकि आपको डेटा को किसी प्रकार की आउटपुट फ़ाइल में डालने की आवश्यकता होगी, मैं एसएसआरएस (एसक्यूएल सर्वर रिपोर्टिंग सर्विसेज) का उपयोग करने का प्रस्ताव करता हूं, जो बिना किसी अतिरिक्त शुल्क के SQL सर्वर 2005 के साथ आता है।
बस मैट्रिक्स का उपयोग करें उपरोक्त प्रश्नों में से किसी एक को पिवट करने के लिए ऑब्जेक्ट की रिपोर्ट करें। यह ऑब्जेक्ट रिपोर्ट रन-टाइम पर कॉलम लेबल बनाने के लिए डेटा मानों को खुशी से निर्धारित करता है और ठीक वैसा ही लगता है जैसा आपको चाहिए। यदि आप एक कॉलम जोड़ते हैं जो आपकी पसंद की तारीख को प्रारूपित करता है, तो आप मो कॉलम द्वारा ऑर्डर कर सकते हैं, लेकिन कॉलम लेबल के रूप में नई अभिव्यक्ति का उपयोग कर सकते हैं।
SSRS में कई प्रकार के प्रारूप और शेड्यूलिंग विकल्प भी उपलब्ध हैं। उदाहरण के लिए, आप इसे एक एक्सेल फ़ाइल ईमेल कर सकते हैं या एक वेब पेज को एक फ़ाइल साझा करने के लिए सहेज सकते हैं।
अगर मैंने कुछ छोड़ा है तो कृपया मुझे बताएं।
जो कोई भी उपरोक्त कोड को क्रिया में देखना चाहता है, उसके लिए यहां कुछ निर्माण स्क्रिप्ट है:
USE tempdb
CREATE TABLE ProjectData (
Project varchar(10),
[Year] int,
Jan decimal(15, 2),
Feb decimal(15, 2),
Dec decimal(15, 2)
)
SET NOCOUNT ON
INSERT ProjectData VALUES ('11-11079', 2008, 0.0, 0.0, 75244.90)
INSERT ProjectData VALUES ('11-11079', 2009, 466.0, 0.0, 0.0)
INSERT ProjectData VALUES ('11-11079', 2010, 855.0, 0.0, 0.0)
INSERT ProjectData VALUES ('01-11052', 2009, 56131.0, 0.0, 0.0)