किसी दृश्य में ORDER BY क्लॉज के विकल्प क्या हैं?


12

यह सवाल सिर्फ इस साइट में होना था :)

ORDER BY को एक दृश्य में उपयोग करने के लिए मना किया गया है, क्योंकि मैं इस दृश्य का उपयोग करते समय कई आदेश के लिए संभावना के कारण समझ गया था।

मुझे पता है कि इस सीमा को दरकिनार करने के तरीके हैं, उदाहरण के लिए TOP 99.999999 PERCENT, लेकिन मैं यह जानना चाहूंगा कि सबसे अच्छा अभ्यास क्या है, इसे कैसे हैक करना है।

इसलिए, यदि मैं व्यक्तिगत उपयोग के लिए अपने डेटाबेस में विचार बनाना चाहता हूं, जिसका अर्थ है कि मैं डेटाबेस से कनेक्ट करना चाहता हूं और बस डेटा को निश्चित और सॉर्ट करना चाहता हूं, अगर मैं एक दृश्य का आदेश नहीं दे सकता तो मुझे यह कैसे करना चाहिए?

वर्तमान में मेरे एसक्यूएल सर्वर डीबी में मेरे पास TOPहैक के साथ विचार हैं , और मैं उन्हें बहुत उपयोग कर रहा हूं, लेकिन यह गलत लगता है।


1
क्यों नहीं टॉप 100%?
जूल

@garik - क्योंकि यह अभी भी आदेश की गारंटी नहीं देता है अगर मैं gbn के लिंक को सही ढंग से समझता हूं। यह सिर्फ एक और गलत गलत जवाब है
जैक कहते हैं कि टॉपसान्वर्स ट्राइ करें ।xyz

1
@Jack डगलस यह एक जवाब नहीं था, यह शीर्ष 99.999 के बारे में एक टिप्पणी ... था
Garik

@garik - SQL Server 2008 में TOP 100 PERCENT को अनदेखा किया गया है, और केवल 99 का उपयोग करके काम किया जा रहा है। मुझे लगता है कि यह तय हो गया था लेकिन मेरा संस्करण अपडेट नहीं हुआ है।
पीले रंग की

1
यह कोई तकनीकी सीमा नहीं है। यह डिजाइन द्वारा है। इसलिए किसी भी तरह का वर्कअराउंड हैक जैसा लगता है। विचारों के विरुद्ध प्रश्नों में अपने आदेश का अनुकरण करें। एक आदेश परिणाम-सेट (e.ge क्वेरी आउटपुट) पर लागू होता है, न कि डेटा का संग्रह (उदाहरण के लिए कोई दृश्य या तालिका)।
निक चामास

जवाबों:


2

"आदेशित" दृश्य जैसी कोई चीज नहीं है क्योंकि दृश्य को पंक्तियों का एक सेट माना जाता है। यदि आप एक निश्चित क्रम चाहते हैं तो संग्रहीत प्रक्रिया का उपयोग करें।


यह वह उत्तर है जो बताता है कि आप एक दृश्य परिभाषा के अंदर आदेश क्यों नहीं थोप सकते हैं। एक सेट, परिभाषा के अनुसार, एक आदेश नहीं है। जब आप के TOPसाथ गठबंधन करते हैं ORDER BY, हालांकि, अब आप एक नए सेट को परिभाषित कर रहे हैं क्योंकि ऑर्डर प्रभावित होता है जो पंक्तियां "शीर्ष" हैं; यही कारण है कि TOPआप ORDER BYएक दृश्य परिभाषा में उपयोग करने के लिए सक्षम बनाता है ।
निक चामास

9

केवल सबसे बाहरी आदेश BY आदेश की गारंटी देगा

  • किसी भी मध्यवर्ती या आंतरिक आदेश को नजरअंदाज कर दिया जाता है।
    इसमें एक दृश्य में ORDER BY शामिल है
  • किसी तालिका में कोई निहित आदेश नहीं है
  • उस तालिका पर किसी भी सूचकांक (क्लस्टर या नहीं) से कोई निहित आदेश नहीं है

लिंक

आदेश द्वारा किसी क्वेरी के सबसे बाहरी चयन कथन के लिए केवल क्रमबद्ध परिणाम की गारंटी देता है। उदाहरण के लिए, निम्नलिखित दृश्य परिभाषा पर विचार करें: (और उदाहरण इस प्रश्न से मेल खाता है)


स्पष्टीकरण के लिए धन्यवाद, लेकिन यह वह उत्तर नहीं है जिसकी मुझे तलाश थी :) मैं यह देखने की कोशिश कर रहा हूं कि एक दृश्य के अंदर बहुत सुविधाजनक ORDER BY के लिए किस तरह के विकल्प हैं।
पीले रंग की

3

दृश्य के आउटपुट के लिए ORDER BY जोड़ें

  SELECT whatever FROM MYVIEW ORDER BY whatever

1
गुच्छेदार सूचकांक द्वारा कोई निहित आदेश नहीं है। -1।
gbn

@SqlACID - अच्छा संपादित करें, +1 बजाय -1 :)
जैक कहते हैं topanswers.xyz कोशिश

इसका मतलब है कि जब भी आप दृश्य के अंदर ऑर्डर का उपयोग करते हैं, तो हम जिस चीज़ से बचने की कोशिश कर रहे हैं, उसे क्लॉज़ करके ऑर्डर को फिर से लिखना होगा।
पीले रंग की

जैसा कि dportas ने कहा, क्वेरी के आसपास एक संग्रहित खरीद रैपर काम करेगा, लेकिन शायद वह नहीं जो आप खोज रहे हैं।
SqlACID

मैंने वास्तव में संग्रहीत प्रक्रिया की कोशिश की, लेकिन यह क्वेरी या हेरफेर करने के लिए आसान और त्वरित नहीं था। भावहीन।
येलोब्लड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.