Domanda

Sto cercando di creare un programma di accesso per ufficio per monitorare i miei dipartimenti.

Ho una tabella che contiene quanto devo a qualcuno di nome tbl_depts.

Ho un'altra tabella che contiene i miei pagamenti denominati TBL_payments.

Ecco la mia sintassi:

SELECT DISTINCTROW
    tbl_depts.who,
    tbl_depts.dept,
    Sum(tbl_payments.payment) AS [Paid],
    (tbl_depts.dept - [Paid]) AS remaining
FROM tbl_depts INNER JOIN tbl_payments ON tbl_depts.[ID] = tbl_payments.[dept_ID]
GROUP BY tbl_depts.who;

Ma c'è un problema. Se c'è un solo pagamento per un reparto, query che mostra vuoto. Ma questa query funziona perfettamente se c'è due pagamenti per quel reparto.

Cosa dovrei fare?

È stato utile?

Soluzione

Che ne dici di usare Sinistra uni, quando si usa Unisciti interni Assicurati Dept_id esiste su entrambi i tavoli.

SELECT DISTINCTROW
    tbl_depts.who,
    tbl_depts.dept,
    Sum(tbl_payments.payment) AS [Paid],
    (tbl_depts.dept - [Paid]) AS remaining
FROM tbl_depts LEFT JOIN tbl_payments 
     ON tbl_depts.[ID] = tbl_payments.[dept_ID]
GROUP BY tbl_depts.who, tbl_depts.dept, (tbl_depts.dept - [Paid]);

Altri suggerimenti

La tua domanda sopra non corre anche: il raggruppamento è sbagliato. Questo funziona:

SELECT tbl_depts.ID, tbl_depts.who, tbl_depts.dept, Sum(tbl_payments.payment) AS paid, [dept]-[payment] AS remaining
FROM tbl_payments INNER JOIN tbl_depts ON tbl_payments.dept_ID = tbl_depts.ID
GROUP BY tbl_depts.ID, tbl_depts.who, tbl_depts.dept, [dept]-[payment];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top