2011-05-31 15 views
5

मैं "0" के अपवाद के साथ आरोही क्रम में "एसडीएनओ" (प्राथमिक कुंजी नहीं) द्वारा आदेश दिया गया, मेरी तालिका, rcarddet रखना चाहता हूं। तो यह बाहर बारी होने के लिए चाहिए:क्वेरी द्वारा SQL ORDER

1 
1 
2 
. 
. 
10 
0 
0 

मेरे प्रश्न है:

SELECT * 
    FROM `rcarddet` 
WHERE `RDATE` = '2011-05-25' 
    AND `RCNO` = '1' 
    AND `PLACE` = 'H' 
    AND `SDNO` != 0 
ORDER BY `rcarddet`.`SDNO` ASC; 
+0

आप कुछ इस तरह (अपरीक्षित कर सकता है, स्पष्ट रूप से , मुझे आपकी स्थिति के विनिर्देशों को नहीं पता ... या यदि इस तरह की चीज भी काम करती है .. लेकिन आप इसके साथ खिलौना कर सकते हैं।) इसे एसडी के अधिकतम मूल्य के रूप में सबकुछ शून्य पर सेट करना चाहिए नहीं और इसलिए उन्हें अंत में 'चयन *, अगर (एसडीएनओ = 0, अधिकतम (एसडीएनओ), एसएनडीओ) क्रमशः आरडीएडीडीट से जहां आरडीएटी =' 2011-05-25 'और आरसीएनओ =' 1 'और प्लेस = 'एच' और एसडीएनओ! = 0 आदेश एएससी द्वारा आदेश; ' –

उत्तर

4
SELECT * 
    FROM `rcarddet` 
WHERE `RDATE` = '2011-05-25' 
    AND `RCNO` = '1' 
    AND `PLACE` = 'H' 
ORDER BY 
    `SDNO` = 0, 
    `SDNO`; 
+0

+1 यह IMHO का सबसे आसान तरीका है। – pilcrow

6

सबसे आसान तरीका है

SELECT * FROM rcarddet 
    WHERE RDATE = '2011-05-25' and RCNO = '1'and PLACE = 'H' 
ORDER BY CASE 
      WHEN rcarddet.SDNO = 0 THEN [max_number_for_the_type_of_SDNO] 
      ELSE rcarddet.SDNO 
     END ASC 
+0

हाय MOG Ponies, क्या आप लगभग मुझे बता सकते हैं कि [max_number_for_the_type_of_SDNO] क्या है? मैं सब कुछ समझ सकता हूं। परेशानियों के लिए खेद है। – user774105

+0

एसडीएनओ के प्रकार को निम्न तालिका में देखें और अधिकतम मान का उपयोग करें। उदाहरण के लिए, यदि एसडीएनओ एक आईएनटी है, तो 2147483647 का उपयोग करें। Http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html –

+0

लेकिन अगर यह 'एसडीएनओ' काम करने की गारंटी नहीं दी जाएगी क्षेत्र स्वाभाविक रूप से अपने प्रकार के लिए अधिकतम मूल्य पकड़ता है। – pilcrow

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