SQL Server несколько левых объединений с несколькими внутренними объединениями - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть несколько таблиц, как показано ниже, где я хочу получить:

Engine.ename
Sum of FuelConsumption.quantity
Sum of Maintainance.pricetotal
Sum of CounterHistory.total

, сгруппированные по Engine.ename

, где Engine.ename всегда следует выбирать вместе с нулевыми значениямидругие переменные, если их выбор возвращает ноль.

Я пробовал это, но не смог, я получаю все Engine.ename значения, но с неправильными числами:

SELECT DISTCINT
    e.ename, 
    ISNUll(SUM(ch.total), 0), 
    ISNUll(SUM(fc.quantity), 0), 
    ISNUll(SUM(m.pricetotal), 0)
FROM 
    Engine e
LEFT JOIN 
    FuelConsumption fc ON fc.engineid = e.id 
LEFT JOIN 
    Maintenance m ON m.engineid = e.id 
LEFT JOIN
    (ElectricBox eb
JOIN 
    ECounter ec ON ec.boxid = eb.ID
JOIN
    Registration r ON r.counterid = ec.ID
JOIN
    CounterHistory ch ON ch.regid = r.id) ON eb.engineid = e.id
GROUP BY
    e.ename

Проверьте мою схему БД ниже:

My Diagram

1 Ответ

0 голосов
/ 17 февраля 2019

Решил мою проблему, соединив два оператора select следующим образом:

Select A as EngineName, totalInvoice, fcQuantity, maintain From (

(select e.ename as 'A', ISNUll(SUM(fc.quantity),0) as fcQuantity, ISNUll(SUM(m.pricetotal),0) as maintain
FROM Engine e
    left Join FuelConsumption fc on fc.engineid = e.id 
    left Join Maintenance m on  m.engineid = e.id 
Group By e.ename) t1
left Join
(select e.ename as 'B', ISNUll(SUM(ch.total),0) as totalInvoice
FROM Engine e
Left Join ElectricBox eb On eb.engineid = e.id
        Left join ECounter ec on ec.boxid = eb.ID
                Left join Registration r on r.counterid=ec.ID
                    Left join CounterHistory ch on ch.regid = r.id
Group By e.ename) t2

On t1.A = t2.B)

Спасибо всем

...