Я пытаюсь получить записи из 4 таблиц с помощью объединений.Эти таблицы тарифы, перевозчики, склады и маржи.Я могу получить нужные записи из этой 4 таблицы, но когда я использую функцию группировки и агрегирования (MIN), мой столбец минимальных продаж корректен, однако другие данные, такие как carrierID, depotID и rateID, отличаются,
У меня есть OriginType (OT) и DestinatioType (DT), и для каждого есть 2 случая;Депо и Дверь.Поэтому, когда я группирую их, я получаю четыре варианта (услуги):
- Депо в депо
- Депо до двери
- Дверь в депо
- От двери до двери
Я пытаюсь получить минимальные (ставки) как «Sell» для каждого из этих сервисов и отобразить их.Продажа рассчитывается следующим образом:
- таблица autoRate, так как A имеет столбец Buy, перевозчик, OT, DT, Origin ( значение: Канберра ), пункт назначения ( значение:Мельбурн ) и Автомобиль ( Значение: 4WD / Van )
- Left Соединяется с носителями как C с
A.carrier = C.ID
- C.Fuellevy столбец как Процент
((C.FuelLevy * A.buy) + C.FuelLevy)
как EQ1 ((EQ1 * 10%) + EQ1)
как EQ2 - Цена EQ2 для каждой строки с таблицей маржи в процентах.Например, если значение EQ2 равно 400, то оно будет выглядеть в таблице «Маржа», найти диапазон (низкий и высокий, например, 350 (низкий) и 500 (высокий)), и его процент будет равен 25%, поэтому
((EQ2 * 25%)+ EQ2)
даетпродать значение.
Я не слишком уверен, как загрузить сюда свои данные и таблицу базы данных, поэтому я попытался объяснить здесь, что я хочу.
запрос, который я строюэто: -
Select Depo.*, DL.id as DepoID, DL.carrier as CarNo, DL.depotCity, DL.depoSuburb, min(Depo.Sell) as sellcost , Depo.OriginType as OT From (
Select Mar.*, M.MarginPer, round((eq2 * M.MarginPer) + eq2)as Sell From (
Select GST.* , EQ1 as 'FinalEQ1' , round((EQ1 * .10) + EQ1,2) as eq2 From (
Select A.ID as RateID, A.Origin, A.OriginState, A.Destination, A.DestinationState, A.Carrier as RateCarrier, A.Car as CarType, A.Buy as Buy, A.OriginType, A.DestinationType ,
C.ID as CarrierID, C.Carrier, C.FuelLevy , round((A.buy * C.FuelLevy) + A.Buy, 2) As EQ1,
CONCAT(A.OriginType, ' to ' ,A.DestinationType ) as service,
D.id as DepoID, D.carrier as CarNo, D.depotCity, D.depoSuburb
from carrier C
left join autorates A on A.carrier = C.ID
left join dList D on D.carrier = C.ID
where A.origin = 'Canberra' and A.destination = 'Melbourne' and A.car = '4WD/Van' AND D.carrier = A.carrier AND A.goodsAllowed = 0
AND C.Disabled = 0
AND D.depotCity = 'Canberra'
order by EQ1
) As GST
order by eq2
) As Mar
Left Join margin M on Mar.eq2 >= M.low and Mar.eq2 <= M.high
order by Sell
) As Depo
Left Join dList DL on DL.Carrier = Depo.RateCarrier
Where DL.depotCity = 'Melbourne'
group by OT
order by sellcost
Результаты перед Группой и MIN (): - 
Как мы видим, стоимость продажи 412 иЗдесь carNo равен 51

И на этом снимке экрана номер оператора изменился, но значение MIN осталось прежним.