[SQL (access)] JOIN met lege velden

Pagina: 1
Acties:

  • ixi
  • Registratie: December 2001
  • Laatst online: 17-05 17:12
Hey,

Sorry voor de vage titel, kon niks beters verzinnen. Ik weet dat het antwoord wel ergens op GOT zal staan maar aangezien ik absoluut niet weet welke zoekwoorden ik hiervoor moet gebruiken open ik toch maar een topic. Alle tutorials die ik heb doorgelezen behandelen dit ook niet. Misschien ben ik gewoon dom maarja! Here goes:

Ik heb 2 tabellen:
- Projecten: Project_nr en totaalbedrag
- Facturen: Project_nr en factuurbedrag

Nu moet ik een "Nog te factureren" query maken (er kunnen dus meerdere facturen per project zijn). Hier heb ik het volgende voor bedacht (tabelnamen vervangen door p en f):

SELECT p.project_nr, p.totaalbedrag, sum(f.factuurbedrag) AS gefactureerd, (sum(f.factuurbedrag) - p.totaalbedrag) AS nogtefactureren
FROM p LEFT JOIN f ON p.project_nr = f.project_nr
GROUP BY p.project_nr, p.totaalbedrag
HAVING p.totaalbedrag <> sum(f.factuurbedrag)

Dit werkt perfekt als er al een factuur is ingevoerd, echter als er nog geen factuur is ingevoerd geeft hij het project niet weer. Ik zou dus iets moeten maken dat sum(f.factuurbedrag) een standaardwaarde (0.00) geeft als er geen entries zijn voor dat project in de tabel facturen, maar hoe?

Bedankt voor de hulp!

  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 09:06
een 'standaard' JOIN is een INNER JOIN

heb je het al met een OUTER JOIN geprobeerd?

dus euhh...

FROM p LEFT OUTER JOIN f ON p.project_nr = f.project_nr
in die ene zin

een OUTER JOIN pakt namelijk alle velden uit de kolom waarop je 'm legt

mijn eerste gedachte bij het zien van de statement

Leeg - Sinds 20180907


  • Database freak
  • Registratie: Oktober 1999
  • Laatst online: 21-01 12:56
HAVING p.totaalbedrag <> sum(f.factuurbedrag)

vervangen door

HAVING p.totaalbedrag <> IsNull(sum(f.factuurbedrag), 0)

IsNull vervangt NULL waarden door 0; wordt gebruikt door SQL Server (T-SQL)

Gebruik in andere SQL dialecten iets met
case NULL then 0 ELSE sum(f.factuurbedrag) end
of
if/iif f.factuurbedrag IS NULL then 0 else f.factuurbedrag end

NULL is een lastige waarde om mee om te gaan

Je zou anders eerst een SUM/Group by query/view kunnen maken van de factuur tabel op project nummer en deze left outer joinen in je query ben je van de HAVING statement af

  • ixi
  • Registratie: December 2001
  • Laatst online: 17-05 17:12
Bedankt voor de tip! De manieren die je zei werkte helaas niet onder Access 2002. Na een beetje doelgerichter zoeken heb ik het commando 'Nz' gevonden, deze doet precies hetzelfde als IsNull maar werkt dus wel onder Access.
Thx!

  • Database freak
  • Registratie: Oktober 1999
  • Laatst online: 21-01 12:56
Ja klopt MS heeft voor Access een ander SQL variant gebruikt dan voor SQL Server. Zodra je de MSDN installeerd en upgraded naar een .ADP; access data project moet ook heel andere commando's gebruiken. Ik heb vroegah Access gebruikt maar werk nu al zolang met SQL Server dat ik de access commandos niet meer ken.