2015-06-02 8 views
5

मैं सभी प्रोफाइल पहले कि कुछ स्थान (रों) के लिए कर रहे हैं प्राप्त करना चाहते हैं: "कीवर्ड 'के पास गलत वाक्य रचना:आदेश द्वारा ... में (...) एएससी

SELECT * FROM profile 
WHERE location IN ('a', 'b', 'c') OR isDefault=1 
ORDER BY location IN ('a', 'b') DESC, -- put to the front if location in 'a','b' 
     isDefault DESC,    -- for each of both groups, put default profiles before the others. 
     location ASC     -- and sort each of the up to four groups by location. 

यह त्रुटि फेंकता में '। "। अगर मैं ऑर्डर क्लॉज हटा देता हूं, तो परिणाम वापस आते हैं।

यहां क्या गलत है?

+0

आपके अनुरोध के साथ एक संभावित मुद्दा यह है कि, 'ऑर्डर' में 'IN' की अनुमति नहीं है, यह है कि आपके द्वारा चुने गए स्थानों का कोई भी आंतरिक प्रकार नहीं होगा "। क्या वाकई आप क्या चाहते हैं? _a_ और _b_ शीर्ष पर समाप्त हो जाएंगे, लेकिन यह _b_ और _a_ के रूप में हो सकता है। – Mackan

+0

@ मैकन 'स्थान एएससी' उन्हें सॉर्ट करेगा, इसलिए हमेशा बी के सामने होता है (यदि दोनों के लिए डीफॉल्ट समान है), * यहां तक ​​कि * यदि मैं 'इन' द्वारा ऑर्डर ('बी', 'ए') पूछता हूं, और यह पूरी तरह से इरादा है। – Alexander

+1

सच है, मुझे नहीं पता कि मैं क्या सोच रहा था - लेकिन यह सही समझ में आया क्योंकि मैं इसे सोच रहा था ;-) – Mackan

उत्तर

11

आप को फिर से लिखने सकता है कि एक पूर्णांक वापस जो sortable है देने के लिए:

case when location IN ('a', 'b') then 0 else 1 end DESC 
+0

अच्छा, लेकिन यदि ओपी पहले 'बी' बी चाहता है, तो उसे [रिवर्स ध्वज मैपिंग या 'डीईएससी'] (http://sqlfiddle.com/#!6/31ff8/1) – StuartLC

+0

आप बिल्कुल सही हैं। अच्छी बात। धन्यवाद। –

2

आप ORDER BY में IN का उपयोग नहीं कर सकते। यह करने के लिए परिवर्तित करें:

ORDER BY location ASC, --will sort a, then b, then c 
+1

और यह कैसे होगा '@ '? चूंकि '@' का ASCII मान 'ए' से कम है, यह पहले आ जाएगा, न कि 'ए'। –

+0

@ पैट्रिकहोफमैन 'जहां स्थान आईएन (' ए ',' बी ',' सी ') पर विचार करते हैं,' कैसे दिखाएगा? – TTeeple

+0

उदाहरण के लिए '' 'स्थान '' 'के साथ आता है। –

1

तो सिंटेक्स द्वारा आदेश है:

ORDER BY column_name ASC|DESC, column_name ASC|DESC 

तो

स्थान IN ('ए', 'बी')

location DESC 
isDefault DESC 

भी केवल एक में इस्तेमाल किया जा सकता कहां खंड

सूत्रों का कहना है:

isDefault

स्थान

स्तंभ नाम

प्रयास होना जरूरी

http://www.w3schools.com/sql/sql_orderby.asp

1

आप एसक्यूएल सर्वर 2012 या अधिक है तो आप कम से कम कोड का उपयोग कर एक परिणाम में एक सही/गलत अभिव्यक्ति कन्वर्ट करने के लिए IIF() आदेश का उपयोग कर सकते हैं का उपयोग कर रहे हैं।

ORDER BY IIF(location IN ('a','b'), 1, 0) ASC 
संबंधित मुद्दे