I have a SELECT query which have ORDER BY
What I want is
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
if(type=2 AND station=2) then
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
Is it possible to place CASE inside IF condition and how?
I tried
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,
}
I don't think you can nest case statement within if statement.
But you can nest case within case statement.
Try,
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
See example here