2016-09-23 80 views
0

我想按照匹配节,细分和关键映射的顺序来整理我的结果。现在我得到了错误,但是我认为我正处在正确的轨道上来完成这个任务。我无法弄清楚如何正确设置我的情况下按照这个顺序。MySQL ORDER BY CASE不工作

编辑:

我已经更新了其运作的查询,但它仍然没有按照正确的顺序排序。

SELECT 
    list.WorkOrder, 
    list.Address, 
    locateparsed.CrossStreet, 
    list.Section, 
    list.Subdivision, 
    locateparsed.KeyMap, 
    locateparsed.City, 
    list.Score 
FROM list 
LEFT JOIN locateparsed ON locateparsed.WorkOrder = list.WorkOrder 
    WHERE locateparsed.City = "PEARLAND" 
    AND list.Completed = 0 
    AND list.Reference = 0 
    AND locateparsed.Ticket IS NOT NULL 
GROUP BY list.WorkOrder 
ORDER BY CASE 
    WHEN list.Section = 'Sec. 1' THEN 1 
    WHEN list.Subdivision = 'Shadow Ridge' THEN 2 
    WHEN locateparsed.KeyMap = '612P' THEN 3 
END 

输出例:

WO | Address | CrossStreet | Section | Subdivision | KeyMap | City 
1 | 123 test | other | Sec. 1 | Shadow Ridge | 612P | Pearland 
2 | 111 test | other | Sec. 1 | Shadow Ridge | 612P | Pearland 
3 | 333 other | bleach | Sec. 2 | Shadow Ridge | 612P | Pearland 
4 | 334 other | bleach | Sec. 2 | Shadow Ridge | 612P | Pearland 
5 | 848 other | bleach | Sec. 2 | Shadow Ridge | 612P | Pearland 
6 | 733 blah | random | Sec. 5 | Bright Ridge | 612P | Pearland 
7 | 722 hmm | blah | Sec. 5 | Bright Ridge | 612P | Pearland 
8 | 723 hmm | blah | Sec. 5 | Bright Ridge | 612P | Pearland 
9 | 111 asdf | fdas | Sec. 30 | Other Ridge | 650P | Pearland 
10 | 123 asdf | fdas | Sec. 30 | Other Ridge | 650P | Pearland 
+0

请添加示例数据和预期输出 –

+1

您有语法错误。您不会在每个WHEN子句之后放置END,只是在CASE表达式的最后。 – Barmar

+0

CASE中没有逗号 – Uueerdo

回答

1

你的语法是错误的。它应该是:

ORDER BY CASE 
    WHEN list.Section = 'Sec. 1' THEN 1 
    WHEN list.Subdivision = 'Shadow Ridge' THEN 2 
    WHEN locateparsed.KeyMap = '612P' THEN 3 
    ELSE 4 -- anything that doesn't match above conditions comes last 
END 

这里有一个END整个CASE表达,每个WHEN后没有了,WHEN子句之间没有逗号。

+0

看到我的编辑,现在工作(不给错误),但它没有正确排序。现在“第3节”在结果中首先出现 –

+0

在最后一次“WHEN THEN”之后,你需要类似'ELSE 9999999'的东西;目前任何结果行的情况下的值的值对于任何这些值为空的情况都不为真。 – Uueerdo

+0

这工作完美,我知道我很接近。谢谢! –