2009-12-10 17 views
9

मुझे एक MySQL क्वेरी मिली है जो मुझे no कॉलम (int, शून्य हो सकती है) के परिणाम देती है। सरल उदाहरण:अंत में एनयूएलएल के साथ 'नो` द्वारा एसक्यूएल ऑर्डर

SELECT * FROM table ORDER BY no ASC

मैं चाहूँगा एक resultset तरह

1, 2, 3, 10, 52, 66, NULL, NULL, NULL

अनुसार क्रमबद्ध करने के लिए, लेकिन मैं

NULL, NULL, NULL, 1, 2, 3, 10, 52, 66

यह SQL क्वेरी के साथ संभव है मिल सकता है?

उत्तर

24

क्या आप इसे आजमा सकते हैं?

ORDER BY ISNULL(no),no; 
+0

क्यों न केवल "इस्लाम द्वारा आदेश (नहीं), नहीं;"? ISNULL पहले से 1 लौटाता है अगर शून्य या 0 नहीं है। – OMA

+0

हाँ, होना चाहिए, मैं सही खड़ा हूँ! – YOU

1

ठीक है, मुझे लगता है कि मुझे मिल गया:

SELECT * FROM table WHERE no IS NOT NULL ORDER BY no ASC UNION
SELECT * FROM table WHERE no IS NULL

या वहां किसी भी बेहतर तरीका है?

+0

कि भी काम करता है :) –

+0

लेकिन जटिल क्वेरी के साथ - कुछ 'JOIN's यह डर हो जाएगा। :) – hsz

2
SELECT * FROM table ORDER BY COALESCE(no,999999) ASC 

बस 99 99 99 को कुछ बड़े से बदल दें यदि आपकी संख्या स्वाभाविक रूप से उससे बड़ी है। "Nullableness" पहले, और no दूसरे पर

SELECT * 
FROM table 
ORDER BY case when no is null then 2 else 1 end, no 

यह आदेश:

+0

खराब जब मेरा 'नहीं' 99 99 99 + 1' प्राप्त करता है। – hsz

4

आप आदेश देने tweak करने के लिए एक CASE कथन का उपयोग कर सकते हैं।

2
SELECT * FROM table ORDER BY ISNULL(field), field ASC; 
+0

मुझे लगता है कि इसकी सादगी – OMA

+0

अच्छी वजह से यह सबसे अच्छा जवाब है, अब उपयोगकर्ता ने "आप" अपना जवाब बदल दिया है, स्वीकार्य उत्तर अब इस जैसा अच्छा है;) – OMA

संबंधित मुद्दे