हमेशा एक रास्ता होता है। सवाल यह है कि "क्या हमें ऐसा करना चाहिए"। नोट ऐसा करके आप ब्रांड डेटा छुपाते हैं। यदि डेटा को फिर से क्रमित किया जाता है, क्रमबद्ध किया जाता है, तो सॉर्टर यह जानने की क्षमता खो देता है कि कौन सा ब्रांड किस पंक्ति के लिए है। यदि यह केवल एक मुद्रित रिपोर्ट है जिसका सहारा नहीं लिया जाना है या एक पीडीएफ से अपेक्षित नहीं है जहां उपयोगकर्ता डेटा में हेरफेर नहीं कर सकता है तो ठीक है .. लेकिन यदि ऐसा है तो उपयोगकर्ता बाद में एक्सेल और हेरफेर करने के लिए डंप कर सकता है ... बेहतर है सभी डेटा।
मुझे व्यक्तिगत रूप से इलेक्ट्रॉनिक डेटा पर जानकारी का यह प्रदर्शन अरुचिकर लगता है, लेकिन मुद्रित रूपों या स्थिर रिपोर्ट पर ठीक है। कारण:इलेक्ट्रॉनिक पर मैं एक्सेल सॉर्ट में आयात करने और डेटा के साथ खेलने में सक्षम हूं; लेकिन अगर कॉलम में अनावश्यक डेटा "गायब" है तो इलेक्ट्रॉनिक हेरफेर समस्याग्रस्त हो जाता है।
CREATE Table foo (
brand varchar(20),
description varchar(20),
prodcode varchar(20));
Insert into foo values ('Brand1', 'Description1', 'Product1'),
('Brand1', 'Description2', 'Product2'),
('Brand1', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand1', 'Description3', 'Product3');
प्रश्न:
SELECT case [email protected] <> f.brand then @Var :=brand end as Brand
, f.description
, f.prodcode
FROM (SELECT * FROM foo ORDER BY brand, description, prodcode) f
CROSS JOIN (SELECT @var := '') b
परिणाम:
Brand description prodcode
Brand1 Description1 Product1
(null) Description2 Product2
(null) Description3 Product3
(null) Description3 Product4
Brand2 Description3 Product4
(null) Description3 Product4
यह क्यों काम करता है:
जादू क्रॉस जॉइन और केस मूल्यांकन में होता है।
1 टेबल है। हम शामिल होने से पहले रिकॉर्ड्स को सॉर्ट कर रहे हैं। हम @var नामक एक यूजर वेरिएबल बना रहे हैं और इसे टेबल फू में पहले रिकॉर्ड पर '' पर सेट कर रहे हैं। फिर हम पहले रिकॉर्ड के ब्रांड को @var असाइन करते हैं। जब SQL क्रॉस 2 दर्ज @var से जुड़ता है तो अब पहले रिकॉर्ड का ब्रांड है। यदि ब्रांड मेल खाते हैं, तो कोई रिकॉर्ड प्रदर्शित नहीं होता है, यदि ब्रांड मेल नहीं खाते हैं, तो हम @var का मान बदलते हैं और नया मान प्रदर्शित करते हैं।
जोखिम:
- अगर अन्य टेबल जॉइन होते हैं, या ऑर्डर टेबल में वांछित नहीं है, तो हमें ब्रांड द्वारा ऑर्डर करने के लिए पहले "फू" पर एक सबक्वेरी करने की आवश्यकता होगी
- इसके द्वारा किसी भी आदेश को लागू करना जिसमें ब्रांड 1 शामिल है, अब बेकार है
- यह उतना पुन:प्रयोज्य नहीं है। एक अन्य मॉड्यूल जो डेटा (दृश्य) का लाभ उठाना चाहता है, अब ऐसा करने में सक्षम नहीं है क्योंकि ब्रांड कुछ रिकॉर्ड्स पर छिपा हुआ है।