#sql #join #select #subquery #outer-join
Вопрос:
Порядок таблицы содержит номера заказов, номера строк и сумму. В заказе может быть несколько строк. В таблице фрахт указаны расходы на перевозку для каждого заказа. Как соединить две таблицы, чтобы перевозка была добавлена в максимальную строку таблицы заказов? Таким образом, в основном перевозка добавляется один раз, а не в каждую строку таблицы заказов, как в случае с левым соединением.
ОЛ
Select ol.orderno , ol.ordersuf, ol.lineno_ , ol.amount
from order ol
where ol.orderno= 12345
[
реклама
select ad.orderno, ad.ordersuf , ad.freight
from Freight ad
where ad.orderno =12345
[
Ожидаемый результат:
[
Комментарии:
1. введите или вставьте данные, а не изображения. Не используйте создание образцов данных для вас.
Ответ №1:
SELECT
a.orderno,
a.ordersuf,
a.lineno_,
a.amount,
CASE WHEN a.lineno_ = Max(a.lineno_) OVER(partition BY a.orderno) THEN b.freight ELSE 0 END AS freight
FROM
ol a
INNER JOIN freight b ON a.orderno = b.orderno
Комментарии:
1. Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение того, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и более качественны, и с большей вероятностью привлекут внимание.
Ответ №2:
Пожалуйста, попробуйте что-то вроде этого: синтаксис оператора CASE может отличаться в зависимости от вашей базы данных.
SELECT ol.orderno , ol.ordersuf, ol.lineno_ , ol.amount, CASE
WHEN ol.lineno_ = (SELECT max(sol.lineno_) FROM order sol WHERE sol.orderno = ol.orderno) THEN ad.freight
ELSE 0
END AS QuantityText FROM order ol INNER JOIN Freight ad WHERE ol.orderno = ad.orderno