使用不同列的MYSQL垂直排序



我不确定这是否可能——我一直试图让它与CASE语句一起使用,但没有成功。

我有大约7列,每个列都为不同的状态分配了一个假/真值,例如:

MA  VT  CT  DE
0   1   0   0
1   0   0   0 

我想做的是根据STATE对行进行升序排序。每次在CASE语句中尝试多个列时,PHPmyAdmin中都会出现错误。在下面的例子中,我只是试图对两个状态进行排序,以获得正确的语法。不确定是我,还是这不可能:

SELECT 
   *  
FROM 
   tblState D
ORDER BY 
    case when MA then 1 else 0 end
    case when VT then 2 else 0 end
ASC

有什么想法吗?

为什么不这样做,假设您希望状态按字母顺序排列:

order by CT desc, DE desc, MA desc, VT desc

您正在使用多个案例语句,根据您的问题,可以在一个案例语句中完成

SELECT 
   *  
FROM 
   tblState D
ORDER BY 
    case when MA then 1 
         when VT then 2 
         else 0
        end
ASC

Fiddle演示

这将适用于您的方法(SQLFiddle Demo):

SELECT 
*  
FROM 
tblState
ORDER BY
CASE MA WHEN 1 THEN MA END DESC,
CASE VT WHEN 1 THEN VT END DESC,
CASE CT WHEN 1 THEN CT END DESC,
CASE DE WHEN 1 THEN DE END DESC

更简单的方法就像Gordon Linoff告诉你的:

order by CT desc, DE desc, MA desc, VT desc

最新更新