用左连接连接的两列不同表的Order By

时间:2018-05-03 12:09:49

标签: sql sql-server database left-join sql-order-by

我有两个表格tbl1有三个字段gadgetid,weightpriceperday

第二个表tbl2包含列promotionsID,gadgetID,promotionalPrice

两者都与左连接相关联意味着一些小工具具有促销价格以及目前仅使用订单仅以价格为单位但现在我想按顺序包括促销价格,例如现在获得结果

gadgetid   priceperday         promotionalprice 

1            32 

9            30

11           26                   23

6            24   

8            21

但是我想要结果如下

gadgetid   priceperday         promotionalprice 

1             32

9             30

6             24

11            26                       23

8             21

当前我正在使用这些行进行orderby

Select  DT.*
From
( Select
ROW_NUMBER() OVER (ORDER BY

CASE WHEN @SortBy = '1'
THEN (Case when CONVERT(Date, isnull(T.FeaturingStartDate,GETDATE()-1)) <=convert(date,GETDATE()) 
   AND CONVERT(Date, isnull(T.FeaturingEndDate,GETDATE()-1)) >=convert(date,GETDATE()) then 1 else 0 end) END Desc,
CASE WHEN (@SortBy = '2' or @SortBy = '0')
THEN T.PricePerDay END,
CASE WHEN @SortBy = '3'
THEN least(tpf.PromotionalPrice, T.PricePerDay)  END DEsc
,T.CreationTimestamp DESC) AS SysSeq

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

我无法在您当前的尝试中找到任何joins,但根据o / p,您需要添加coalesce()函数并执行排序

order by coalesce(promotionalprice, priceperday) desc

答案 1 :(得分:1)

试试这个:

SELECT gadgetid,priceperday,promotionalprice
FROM YourTable
ORDER BY CASE WHEN ISNULL(promotionalprice,'')='' THEN priceperday 
            ELSE 
                CASE WHEN promotionalprice>priceperday 
                     THEN priceperday 
                ELSE promotionalprice 
                END 
            END

希望它运作正常。如果有任何问题,请发表评论。