2016-09-23 10 views
0

セクション、サブディビジョン、キーマップの順番で結果を並べ替えようとしています。今私はエラーが発生しますが、私はこれを達成するために正しい道にいると思います。私はこの順序でそれを行うために私のケースを適切にセットアップする方法を理解できません。MySQL ORDER BY CASEが動作しない

EDIT:

私は作品のクエリを更新したが、そのはまだ正しい順序で並べ替えません。

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'節の後に、' CASE'式の最後に 'END'を置かないでください。 – Barmar

+0

ケース内にコンマはありません – Uueerdo

答えて

1

あなたの構文が間違っています。それは次のようになります。ちょうど1 END全体CASE表現ではなく、各WHEN後、およびWHEN句の間にはカンマがあります

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 

+0

私の編集を参照してください。現在は動作しています(エラーは表示されません)。ただし、正しくソートされません。今すぐ "Sec。3"が結果に最初に現れる –

+0

最後の 'WHEN THEN'の後ろに' ELSE 9999999'のようなものが必要です。現在のところ、結果行のいずれの場合にも当てはまらない結果行の大文字小文字の値は、nullになります。 – Uueerdo

+0

これは完璧に働いた、私は私が近くにいることを知っていた。ありがとう! –

関連する問題