Order By для двух столбцов разных таблиц, связанных с левым соединением - PullRequest
0 голосов
/ 03 мая 2018

У меня есть две таблицы, одна из которых tbl1 имеет три поля gadgetid,weight и priceperday.

В то время как вторая таблица 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

В настоящее время я использую эти строки для заказа

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 голосов
/ 03 мая 2018

Я не могу найти ни одного joins в вашей текущей попытке, но согласно o / p вам нужно добавить функцию coalesce() и выполнить упорядочение

order by coalesce(promotionalprice, priceperday) desc
0 голосов
/ 03 мая 2018

Попробуйте это:

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

Надеюсь, это работает нормально. Если возникли проблемы, прокомментируйте.

...