我不确定这是否可能——我一直试图让它与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