यह मूल रूप से एक धुरी तालिका है।
इसे प्राप्त करने के बारे में एक अच्छा ट्यूटोरियल यहां पाया जा सकता है: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
मैं इस पोस्ट को पढ़ने की सलाह देता हूं और अपनी आवश्यकताओं के लिए इस समाधान को अनुकूलित करता हूं।
अपडेट करें
ऊपर दिए गए लिंक के बाद वर्तमान में उपलब्ध नहीं है, मुझे लगता है कि आप सभी के लिए कुछ अतिरिक्त जानकारी प्रदान करने के लिए बाध्य महसूस कर रहे हैं यहाँ mysql धुरी जवाब के लिए खोज। इसमें वास्तव में बहुत अधिक जानकारी थी, और मैं वहां से सब कुछ नहीं डालूंगा (इससे भी अधिक जब मैं सिर्फ उनके विशाल ज्ञान को कॉपी नहीं करना चाहता), लेकिन मैं धुरी से निपटने के बारे में कुछ सलाह दूंगा पेकू से उदाहरण के साथ आमतौर पर वर्ग रास्ता सारणी जो पहले स्थान पर सवाल पूछा था।
हो सकता है कि लिंक जल्द ही वापस आ जाए, मैं इसके लिए नजर रखूंगा।
स्प्रेडशीट तरीका ...
बहुत से लोग सिर्फ इस उद्देश्य के लिए MSExcel, OpenOffice या अन्य स्प्रेडशीट-टूल जैसे टूल का उपयोग करते हैं। यह एक वैध समाधान है, बस वहाँ पर डेटा की प्रतिलिपि बनाएँ और इसे हल करने के लिए GUI ऑफ़र टूल का उपयोग करें।
लेकिन ... यह सवाल नहीं था, और यह कुछ नुकसान भी पहुंचा सकता है, जैसे कि डेटा को स्प्रेडशीट, समस्याग्रस्त स्केलिंग और इतने पर कैसे प्राप्त किया जाए।
एसक्यूएल तरीका ...
उनकी तालिका कुछ इस तरह दी गई है:
CREATE TABLE `test_pivot` (
`pid` bigint(20) NOT NULL AUTO_INCREMENT,
`company_name` varchar(32) DEFAULT NULL,
`action` varchar(16) DEFAULT NULL,
`pagecount` bigint(20) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=MyISAM;
अब उसकी / उसकी वांछित तालिका देखें:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
पंक्तियाँ ( EMAIL
, PRINT x pages
) स्थितियों से मिलती जुलती हैं। मुख्य समूह द्वारा है company_name
।
इस स्थिति को सेट करने के लिए CASE
-statement का उपयोग करने के लिए चिल्लाता है । कुछ से समूह के लिए, अच्छी तरह से, उपयोग ... GROUP BY
।
इस धुरी को प्रदान करने वाला मूल SQL कुछ इस तरह दिख सकता है:
SELECT P.`company_name`,
COUNT(
CASE
WHEN P.`action`='EMAIL'
THEN 1
ELSE NULL
END
) AS 'EMAIL',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '1'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 1 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '2'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 2 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '3'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 3 pages'
FROM test_pivot P
GROUP BY P.`company_name`;
यह वांछित परिणाम बहुत तेजी से प्रदान करना चाहिए। इस दृष्टिकोण के लिए प्रमुख नकारात्मक पक्ष, अपनी धुरी तालिका में जितनी अधिक पंक्तियाँ आप चाहते हैं, उतनी ही अधिक शर्तें आपको अपने SQL कथन में परिभाषित करने की आवश्यकता है।
इससे निपटा जा सकता है, इसलिए भी, लोग तैयार किए गए बयानों, दिनचर्या, काउंटर और इस तरह का उपयोग करते हैं।
इस विषय के बारे में कुछ अतिरिक्त लिंक: