Sql-Server-2016

如何在不同的選擇語句條件值上按子句排序

  • August 2, 2019

這是我的查詢,

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)`

引用自:https://dba.stackexchange.com/questions/244400