2011-05-31 79 views
5

我想讓我的表rcarddet由「SDNO」(非主鍵)按升序排列,但「0」除外。因此,它應該變成是這樣的:SQL ORDER BY查詢

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

你可以做這樣的事情(未經測試,顯然最簡單的方法,我不知道你的情況的具體情況......或者如果這種類型的東西甚至有效......但你可以玩弄它)。這應該將一切設置爲零作爲SD的最大值NO,因此將它們放在末尾 'SELECT *,IF(SDNO = 0,max(SDNO),SNDO)as order,FROM rcarddet WHERE RDATE ='2011-05-25'and RCNO ='1'and PLACE = 'H'and SDNO!= 0 ORDER BY order ASC;' – 2011-05-31 02:56:04

回答

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

+1這是恕我直言的最簡單的方法。 – pilcrow 2011-05-31 05:56:56

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

Hi MOG Ponies, 你能粗略地向我解釋什麼是[max_number_for_the_type_of_SDNO]? 我能理解除此之外的所有內容。 對不起,煩惱。 – user774105 2011-05-31 03:53:24

+0

在下表中查找SDNO的類型並使用最大值。例如,如果SDNO是INT,請使用2147483647. http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html – 2011-05-31 04:42:51

+0

但是,如果'SDNO'字段自然會保持其類型的最大值。 – pilcrow 2011-05-31 05:55:12