2017-07-14 34 views
1

鑑於從SQL查詢的結果如下:排序的SQL查詢結果取決於數據值不同的方式

1, 
4, 
Red, 
Blue, 
3, 
Green, 
2, 
Yellow, 
Magneta, 
Rubi 

我想實現正確的順序是:

紅,藍,綠,的Magneta,魯維,黃色,1,2,3,4

  • 紅色,藍色和綠色必須始終在頂部和以該順序
  • 然後,α項應遵循順序遞增(M,R,Y)
  • 遵循由以升序數字項(1,2,3,...)

我已經玩以下無效,所以如果有人能指出我的方向正確

SELECT myCol FROM myTable 
ORDER BY 
CASE WHEN myCol='Red' then 1 
    WHEN myCol='Blue' then 2 
    WHEN myCol='Green' then 3 END, 
CASE 
    WHEN myCol not in ('Red','Blue','Green') and IsNumeric(party_id) = 0 then myCol END ASC, 
CASE 
    WHEN myCol not in ('Red','Blue','Green') and IsNumeric(party_id) = 1 then CAST(myCol AS INT) END ASC 

謝謝!

編輯1: 我當前的訂單真的返回:

1,2,3,4, Magneta, Rubi, Yellow, Red, Blue, Green 
+0

您正在使用哪個數據庫管理系統? (某些產品特定的SQL在那裏...) – jarlh

+0

對不起,我忘了:MicrosoftSQL Server 2014 – MCS

回答

1

你可以試試這個

SELECT myCol 
FROM myTable 
ORDER BY 
    CASE WHEN myCol='Red' THEN 1 
     WHEN myCol='Blue' THEN 2 
     WHEN myCol='Green' THEN 3 
     ELSE 4 
    END, 
    CASE 
     WHEN myCol NOT IN ('Red','Blue','Green') AND IsNumeric(party_id) = 1 
      THEN CAST(myCol AS INT) 
     ELSE -1 
    END, 
    CASE 
     WHEN myCol NOT IN ('Red','Blue','Green') AND IsNumeric(party_id) = 0 
      THEN myCol 
    END; 
+0

工程就像一個魅力!爲了充分理解它,我真的很感謝一些評論。乾杯! – MCS

+0

對於你的問題,你可以使用'CASE'搜索和查看,如果你沒有設置值,那麼默認值將是NULL,並且SQL Server ORDER NULL首先,所以你得到了錯誤的結果。我的查詢是設置'CASE'默認值的一種方式,以便您的3個預期組按順序排列結果:RGB,數字和其他varchar。 –

相關問題