SQL СЛУЖЕБНОЕ ЗАЯВЛЕНИЕ для заказа по предложению - PullRequest
0 голосов
/ 21 марта 2020

Исходя из моего предыдущего вопроса, могу ли я вернуть самую высокую цену, а также подсчитать все количества от нескольких поставщиков [Выберите самую высокую цену и добавьте кол-во для всех поставщиков] (SQL Сервер: ВЫБЕРИТЕ самую высокую цену и добавить кол-во из таблицы )

Я бы хотел поместить оператор case в часть запроса ORDER BY Price DES C, чтобы вернуть самую высокую цену, если количество равно> 10, или вернуть самую низкую если дело не выполнено, но я не могу заставить запрос работать. Можно ли поставить дело в тот же запрос? или есть другой способ go об этом?

Это прекрасно работает, как есть

SELECT ManuPartNo, WebPrice, TotalQtyAdded, Supplier
FROM
(SELECT dbo.TableAllProds. *,
    ROW_NUMBER() OVER(PARTITION BY ManuPartNo ORDER BY WebPrice DESC) AS RN,
    SUM(TotalQty) OVER(PARTITION BY ManuPartNo) AS TotalQtyAdded
        FROM TableAllProds) AS t
WHERE RN = 1
ORDER BY ManuPartNo

Это то, что я пытался, но, тем не менее, я пишу часть If, это не похоже на синтаксис.

SELECT ProdName, ManuPartNo, Price, Qty, TotalQty, Supplier
FROM (  SELECT *,
           ROW_NUMBER() OVER(PARTITION BY ManuPartNo 
               ORDER BY 
                      CASE WHEN Price > '10' Price DESC
                      ELSE Price ASC END ) AS RN,
           SUM(Qty) OVER(PARTITION BY ManuPartNo) AS TotalQty,
    FROM dbo.TableAllProds) AS t
WHERE RN = 1
ORDER BY ManuPartNo;

Можно ли написать это в одном запросе? Будем благодарны за любые предложения или ссылки на другие сообщения.

1 Ответ

1 голос
/ 21 марта 2020

Вы можете использовать предложение WITH TIES.

Однако подзапрос WHERE RN = 1 является более производительным

Пример

Select top 1 with ties *
 From  dbo.TableAllProds
 Order By row_number() over (partition by ManuPartNo Order by try_convert(money,Price) Desc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...