使用不同列的MYSQL垂直排序?

时间:2014-04-21 20:06:11

标签: mysql sorting

我不确定这是否可行 - 我一直试图让这个与CASE声明一起使用,但我没有运气。

我有大约7个列,每个列都有一个false / true值,用于不同的状态,例如:

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

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

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

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

Fiddle Demo

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

根据您的方法(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

更简单的方法就像戈登·林诺夫告诉你的那样:

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