Sql-Server-2016
如何在不同的選擇語句條件值上按子句排序
這是我的查詢,
SELECT DISTINCT BASE_Product.ProductId, (CASE WHEN (BASE_Art.ArtId IS NOT NULL AND BASE_Heel.HeelId IS NULL) THEN BASE_Art.ArtNo ELSE (CASE WHEN (BASE_Art.ArtId IS NULL AND BASE_Heel.HeelId IS NOT NULL) THEN BASE_Heel.HeelNo ELSE (BASE_Art.ArtNo + '-' + BASE_Heel.HeelNo) END)END) AS ArtHeelNo, BASE_InvoiceLine.Price FROM BASE_Product INNER JOIN BASE_ProductVariation ON BASE_Product.ProductId = BASE_ProductVariation.ProductId INNER JOIN BASE_InvoiceLine ON BASE_ProductVariation.ProductVariationId = BASE_InvoiceLine.ProductVariationId LEFT OUTER JOIN BASE_Art ON BASE_Product.ArtId = BASE_Art.ArtId LEFT OUTER JOIN BASE_Heel ON BASE_Product.HeelId = BASE_Heel.HeelId WHERE (BASE_InvoiceLine.InvoiceId = 2)
執行上述查詢後,我將得到如下螢幕截圖所示的結果。
以上結果由 ProductId 明智地排序,我想通過 HeelNo 明智地獲得此訂單。
問題是我不能明智地按 HeelNo 排序,因為在不同的選擇和大小寫上按子句排序..
我想要的結果應該是,
我怎樣才能做到這一點..
由於 ORDER BY 在 SELECT 之後執行,因此您可以使用您在 SELECT 子句中定義的別名。
ORDER BY ArtHeelNo
另一個(不太推薦的)選項是僅按列數排序
ORDER BY 2
也可以只重複 ORDER BY 中的語句,這是不太推薦的,因為如果你的語句會改變,你必須改變它兩次。閱讀起來也很麻煩。
`ORDER BY (CASE WHEN (BASE_Art.ArtId IS NOT NULL AND BASE_Heel.HeelId IS NULL) THEN BASE_Art.ArtNo ELSE (CASE WHEN (BASE_Art.ArtId IS NULL AND BASE_Heel.HeelId IS NOT NULL) THEN BASE_Heel.HeelNo ELSE (BASE_Art.ArtNo + '-' + BASE_Heel.HeelNo) END)END)`