Polecenie SQL z JOIN

0

Przedstawiam screena 3 tabel w bazie danych:
title

Jedna zawiera dane osób -> druga ich rachunki -> a trzecia dokonanie płatności za poszczególne rachunki w ratach.
Chciałbym wykonać zapytanie SQL SELECT z użyciem JOIN, które zwróci mi sumę, jaka pozostała do zapłacenia za rachunki dla każdej z osób.
Wynikiem powinno być:

name | suma do zapłaty
Jakub | 80
Anna | 10
Tomasz | 40

Proszę o pomoc w skonstruowaniu takiego zapytania.

2

Nawet się nie zabieram za pisanie jak @Panczo już tu siedzi ... człowiek się na klika a i tak jak naciśnie "zapisz" będzie już poprawna odpowiedź :P

0

No co ty? Pisz oddaj Ci pola ;)

2

Ja podrzucę małą podpowiedź:

sqljoin

2

O jaa ale się wpakowałem .. :)

Tak bez sprawdzenia ot by było coś takiego:

 WITH platnosci
     AS (SELECT id_billing,
                Sum(installment) AS sumaPlatnosci
         FROM   installments
         GROUP  BY id_billing)
SELECT NAME,
       ( koszt - Isnull(sumaplatnosci, 0) ) AS [suma do zaplaty]
FROM   users u
       LEFT JOIN (SELECT id,
                         id_user,
                         Sum(price) koszt
                  FROM   billings
                  GROUP  BY id,
                            id_user) b
              ON u.id = b.id_user
       LEFT JOIN platnosci p
              ON b.id = p.id_billing  

Edit: dałem LEFT JOIN - na wypadek gdybyśmy chcieli zobaczyć wszystkich użytkowników nawet tych bez faktur ... ale jak teraz to piszę to myślę, że to bez sensu :) .. więc pierwszego joina zamieniłbym na INNER JOIN.
Edit2: i nie wiem po co sumuję "price" z faktury ... za duża presja chyba i pisane na szybko ;) ... sum(price) zamienić na price i nie trzeba grupować wtedy.

3

@BlackBad czemu tak skomplikowałeś?

Select
    u.name
    ,sum(b.price)-isnull(sum(iinstallment),0) as [suma do zaplaty]
from
    user u
    inner join billings  b on b.id_user = u.id
    left join installments i on i.id_billing = b.id

Moje roziązanie jest złe, bo w przypadku kilku płatności do jednego rachunku zwiększy się kwota do zaplaty, poprawnie będzie:

Select
    u.name
    ,sum(b.price)-isnull(sum(iinstallment),0) as [suma do zaplaty]
from
    user u
    inner join billings  b on b.id_user = u.id
    left join (SELECT id_billing,
                SUM(installment) AS installment
         FROM   installments
         GROUP  BY id_billing) i on i.id_billing = b.id

1 użytkowników online, w tym zalogowanych: 0, gości: 1