Как объединить 2 таблицы в максимальной записи, но показать все записи первой таблицы?

#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