2016-02-03 29 views
0

我需要排序是这样的:
初步结果都是谁与CHA上启动,然后MAS,DIA,PLA,GOL,SIL,BROSQL的ORDER使用LIKE BY CASE

像这样:
1。 CHALLENGER我
2. CHALLENGER我
3. MASTER II
4. MASTER III
5. PLATINUM II
6. PLATINUM IV
7. PLATINUM V
等。

最重要的是只按名称排序,而不是在最后罗马数字,但如果这很容易,如果有人会显示出一种方式会很感激。

截至目前,这是我的SQL:

SELECT rank FROM table 
    ORDER BY 
    CASE rank 
     WHEN rank LIKE 'CHA%' THEN 1 
     WHEN rank LIKE 'MAS%' THEN 2 
     WHEN rank LIKE 'DIA%' THEN 3 
     WHEN rank LIKE 'PLA%' THEN 4 
     WHEN rank LIKE 'GOL%' THEN 5 
     WHEN rank LIKE 'SIL%' THEN 6 
     WHEN rank LIKE 'BRO%' THEN 7 
     WHEN rank LIKE 'Unranked' THEN 8 
     WHEN rank LIKE 'No Data' THEN 9 
     ELSE 10 
    END; 

然而,这是行不通的。我正在使用MySQL数据库。任何帮助赞赏。

回答

1

你这是什么东西:

SELECT [rank] FROM table 
    ORDER BY 
    CASE [rank] 
     WHEN [rank] LIKE 'CHA%' THEN 1 
     WHEN [rank] LIKE 'MAS%' THEN 2 
     WHEN [rank] LIKE 'DIA%' THEN 3 
     WHEN [rank] LIKE 'PLA%' THEN 4 
     WHEN [rank] LIKE 'GOL%' THEN 5 
     WHEN [rank] LIKE 'SIL%' THEN 6 
     WHEN [rank] LIKE 'BRO%' THEN 7 
     WHEN [rank] LIKE 'Unranked' THEN 8 
     WHEN [rank] LIKE 'No Data' THEN 9 
     ELSE 10 
    END; 

你想要做的是这样的:

SELECT [rank] FROM table 
     ORDER BY 
     CASE 
      WHEN [rank] LIKE 'CHA%' THEN 1 
      WHEN [rank] LIKE 'MAS%' THEN 2 
      WHEN [rank] LIKE 'DIA%' THEN 3 
      WHEN [rank] LIKE 'PLA%' THEN 4 
      WHEN [rank] LIKE 'GOL%' THEN 5 
      WHEN [rank] LIKE 'SIL%' THEN 6 
      WHEN [rank] LIKE 'BRO%' THEN 7 
      WHEN [rank] LIKE 'Unranked' THEN 8 
      WHEN [rank] LIKE 'No Data' THEN 9 
      ELSE 10 
     END; 
+0

酷!所以在mysql中,'case'之后不需要任何东西? –

+1

有两种方法可以使用CASE语句。一种方法是CASE WHEN <列内的值> ....或者您可以按照我在答案中所做的方式使用它。但是,当你使用LIKE时,你必须按照我在答案 –

+0

中的方式使用它,非常感谢它! – Marcipanas