Hi all,

Ik heb 2 tabellen.
A:
id
datetime
serial
type

B:
id
datetime
serial
type

Nou wil ik het aantal serial nummers hebben uit tabel A met type "C" van vorige maand (whatever maakt even niet uit, kan in voorbeeld zelfs weg gelaten worden)
MAAR
de serienummers die in B voorkomt moet ik NIET meetellen..

Nou doe ik het met 2 losse queries.
SELECT COUNT(serial) FROM A WHERE type = "C" AND (DATEPART(week, datetime) = 15 OR DATEPART(week, datetime) = 16 OR DATEPART(week, datetime) = 17 OR DATEPART(week, datetime) = 18) AND DATEPART(yyyy, datetime) = 2020 


Nou moeten alleen de serienummers die ook nog in B voorkomen er vanaf.

 SELECT COUNT(a.[t_serial])
		FROM A a
		RIGHT JOIN B b
		ON b.serial = a.serial
		WHERE a.Type = "C"
AND (DATEPART(week, a.datetime) = 15 OR DATEPART(week, datetime) = 16 OR DATEPART(week, datetime) = 17 OR DATEPART(week, datetime) = 18) AND DATEPART(yyyy, datetime) = 2020 


En deze aantal aftrekken van de ander, maar.... Ik krijg nou dubbele results in de 2e query..
1 is van A en 1 is van B.

Het kan wel zijn, dat het serienummer in B met een andere type voorkomt. Dan alsnog mag ik hem niet meetellen.
Zou je geen WHERE NOT EXISTS of WHERE NOT IN kunnen gebruiken ofzo? Of een LEFT/RIGHT JOIN en dan een controle of het serienummer ongelijk is aan NULL.

DATEPART --> er zijn ook functies als WEEK() en YEAR() geloof ik?

> Het kan wel zijn, dat het serienummer in B met een andere type voorkomt. Dan alsnog mag ik hem niet meetellen.
Dus als OF het serienummer OF het type overeen komt in tabel B dan?
Je hebt helemaal gelijk, WHERE ... NOT IN ( SELECT serial FROM B WHERE serial is NOT NULL ) geeft me de juiste results terug in 1 keer.

Ik had wellicht moeten vermelden dat het MSSQL was :)

thanks!!

Reageren