Originariamente inviato da albyjkl
SELECT
DISTINCT(venduto.cli_id) AS id,
clienti.des1,
target_cli.target,
SUM(venduto. cc_prz_sc * venduto.cc_tot_btg) AS vend,
SUM(venduto. cc_prz_sc * venduto.cc_tot_btg) - target_cli.target AS diff
FROM clienti
INNER JOIN venduto ON clienti.id = venduto.cli_id
INNER JOIN target_cli ON clienti.id = target_cli.id_cli
WHERE venduto.cc_data >='2009-01-01'
AND venduto.cc_data <='2009-12-31'
AND target_cli.anno = '2009'
GROUP BY clienti.des1
torniamo a bomba.... non devi cambiare le carte in tavola. Qui dici:
Il problema è che la tabella target_cli non è del tutto popolata
quindi nel risultato della SELCT mi mancano tutti i record
non popolati nella tabella target_cli, mentre vorrei avere tutti
i record e sostituire il campo target inesistente con target = 0
dimmi che c'entra:
codice:
FROM venduto
LEFT JOIN target_cli
eventualmente la tua query dovrebbe essere: (dico eventualmente perche' nessuno all'infuori di te conosce la struttura di questo db)
codice:
SELECT
venduto.cli_id AS id,
clienti.des1,
target_cli.target,
SUM(venduto.cc_prz_sc * venduto.cc_tot_btg) AS vend,
SUM(venduto.cc_prz_sc * venduto.cc_tot_btg) - target_cli.target AS diff
FROM clienti
LEFT JOIN venduto ON clienti.id = venduto.cli_id
LEFT JOIN target_cli ON clienti.id = target_cli.id_cli
WHERE venduto.cc_data between '2009-01-01' AND '2009-12-31'
AND target_cli.anno = '2009'
GROUP BY clienti.des1
clienti.des1 cos'e' ??? forse dovresti usare clienti.id ???