2013-09-27 75 views
0

我可以使用SQL查詢構建的幫助。這是我的情況:mysql order by multiple columns including flags

我想按3列排序結果。這是情況。我列出了附加項目,並且只需要在該列表中選擇一個,哪一個取決於其「重要性」。重要的是通過這個規則確定:

  • 如果某些項目有更大的嚴重性,採取一個
  • 如果嚴重程度是一樣的,上面的標誌是對一些項目,採取一個
  • 如果嚴重性和頂部是一樣的,拿一個具有更大的優先 (如果所有都一樣,無所謂採取哪一個)

的問題是,上面的參數,因爲它可以包含任何文本和規則應該如果它是空的(''),空或E(E爲空)標誌沒有被設置並且只有s ev和before應該被使用,如果任何其他的值在頂部,那麼該標誌開啓並且應該使用第二個規則。

這看起來很奇怪我知道(那一列),但實際上我只是從外部獲取值並按原樣處理它們。
我不能使用ORDER BY severity,top,priority作爲頂部DESC或ASC是錯誤的,所以我不知道如何繼續。一些示例設置是sqlFiddle。 任何想法? Thx提前幫助我。

回答

1

在您的SELECT聲明中添加一個計算的ìmportance列。使用CASE它,這樣,當top爲空,空或 'E',importance是0。否則,importance爲1

然後ORDER BY severity,ìmportance,priority

+0

THX,好建議。我可以避免使用這個程序或多個查詢嗎?正如你在我的小提琴中看到的,我使用了子查詢,並且我發現你不能在子查詢ORDER BY中使用別名。我的想法是使用SELECT項,嚴重性(CASE WHEN top =''OR top ='E'OR top IS NULL THEN 0 ELSE 1 END)AS重要性,優先級,附 從歷史記錄i1開始,然後是ORDER BY嚴重性,重要性,子查詢中的優先級,但重要性不被認可。 –

+0

這看起來像一個單獨的問題。你能否提出一個新的問題?這裏沒有足夠的信息來正確回答。 – Hbcdev

+0

我可以,但實際上在另一個問題,我不能解釋更多,然後我在這一個(我的開始問題)做了。要點是附加的項目,我只需要選擇一個具有更高重要性的項目(我解釋了這裏的重要性如何)。如果您需要更多信息,我可以在此更新我的問題?因爲這在我看來是同樣的問題,不知道我是否應該打開另一個。您可以在我的小提琴中看到的另一件事是附加的列,它定義了什麼項目連接在一起。 –