2011-05-31 40 views
5

"SDNO" (birincil anahtar değil) tarafından "0" hariç, artan düzende sipariş verdiğim tablomu rcarddet istiyorum.SQL SİPARİŞ TARAFINDAN sorgu

1 
1 
2 
. 
. 
10 
0 
0 

Benim sorgu şimdi: gibi Yani haline gelmek gerektiğini

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

kolay yolu , Durumunuzun özelliklerini bilmiyorum ... ya da bu tür bir şey bile çalışıyorsa .. ama onunla oyuncak yapabilirsiniz.) Bu, herşeyi SD'nin maksimum değeri olarak sıfıra ayarlamalıdır. NO ve dolayısıyla 'SELECT *, IF (SDNO = 0, max (SDNO), SNDO) sırasına göre sonlandırın, FROM rcarddet WHERE RDATE = '2011-05-25' ve RCNO = '1'and PLACE = 'H' ve SDNO! = 0 SİPARİŞ SIRASINDA; –

cevap

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

+1 Bu, IMHO'nun en kolay yoludur. – pilcrow

6

Açıkçası, denenmemiş böyle bir şey (yapabilirdi

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

Merhaba MOG Ponies, Neye [max_number_for_the_type_of_SDNO] için ne olduğunu açıklayabilir misiniz? Bunların hepsini anlayabiliyorum. Sorunlar için üzgünüm. – user774105

+0

SDNO'nun tipini aşağıdaki tabloda arayın ve maksimum değeri kullanın. Örneğin, SDNO bir INT ise, 2147483647'yi kullanın. Http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html –

+0

Ancak, bu bir 'SDNO'nun çalışacağı garanti edilmez. alanın türü için doğal olarak maksimum değeri tutuyor. – pilcrow