mysql ORDER BY 中,IF 条件中是否可以使用 CASE

问题描述 投票:0回答:1

我有一个 SELECT 查询,其中有 ORDER BY

我想要的是

if(type=2 AND (station=0 OR station=1)) then

SELECT * FROM table
 ORDER BY CASE type
          WHEN 1 OR 2 THEN 1
          WHEN 3 THEN 2
          ELSE 4
    END,CAST(choice AS SIGNED ) DESC

如果(类型=2 AND 站=2)则

SELECT * FROM table
ORDER BY CASE type
         WHEN 1 THEN 1
         WHEN 2 THEN 2
         WHEN 3 THEN 3
         ELSE 4   
   END,CAST(choice AS SIGNED ) DESC

是否可以将 CASE 放置在 IF 条件内以及如何放置?

我试过了

SELECT * FROM table
 ORDER BY IF(type=2 AND (station=0 OR station=1))
          {
          CASE type
           WHEN 1 OR 2 THEN 1
           WHEN 3 THEN 2
           ELSE 4
          END,CAST(choice AS SIGNED ) DESC
          }
          ELSEIF(type=2 AND station=2)
          {
          CASE type
           WHEN 1 THEN 1
           WHEN 2 THEN 2
           WHEN 3 THEN 3
           ELSE 4
          END,CAST(choice AS SIGNED ) DESC,
          }  
mysql if-statement case sql-order-by
1个回答
0
投票

我认为你不能在 if 语句中嵌套 case 语句。

但是您可以将 case 嵌套在 case 语句中。

尝试一下,

SELECT * FROM `table`
 ORDER BY CASE WHEN type=2 AND (station=0 OR station=1) 
               THEN 
               CASE type
                    WHEN 1 OR 2 THEN 1
                    WHEN 3 THEN 2
                    ELSE 4
                    END
               WHEN type=2 AND station=2 
               THEN 
               CASE WHEN 1 THEN 1
                    WHEN 2 THEN 2
                    WHEN 3 THEN 3
                    ELSE 4   
               END
    END ,CAST(choice AS SIGNED ) DESC    

参见示例此处

© www.soinside.com 2019 - 2024. All rights reserved.