Hallo,
Ik heb een query gemaakt waarbij ik per maand een bepaalde SUM doe.
Nu heb ik om alle 12 maanden naast elkaar te krijgen een query gemaakt met daarin 12 keer een UNION ALL
Het voordeel hiervan is dat het werkt. Het nadeel is dat de query heel erg groot wordt. Maar mijn gevoel zegt dat dit makkelijk kan echter zie ik niet hoe. Iemand een idee?Code:SELECT
ALUMUTATIE.cltnr AS klantnummer,
ALUCLIENT.faccltnr,
ALUMUTATIE.wksnr AS uvwcode,
Concat(ALUMUTATIE.wksnr, ' - ', ALUWERKSOORT.omsch) AS UVWOmschrijvingFull,
ALUMUTATIE.jaar AS opdracht,
Year(ALUMUTATIE.mudat) AS MuatieJaar,
ALUDECLARATIE.decnr,
ALUDECLARATIE.datum_aanmaak AS decdt,
ALUDECLARATIE.facjr,
ALUDECLARATIE.facdt,
ALUDECLARATIE.facpr,
ALUDECLARATIE.facnr,
DatePart(mm, ALUDECLARATIE.facdt) - 1 AS Periode,
Sum(ALUMUTATIE.mutbd) AS Januari,
0 AS februari,
0 AS maart,
0 AS april,
0 AS mei,
0 AS juni,
0 AS juli,
0 AS augustus,
0 AS september,
0 AS oktober,
0 AS november,
0 AS december,
ALUWERKSOORTGROEP.wgrnr,
ALUWERKSOORTGROEP.omsch
FROM
ALUMUTATIE
LEFT JOIN ALUDECLARATIE ON ALUMUTATIE.decnr = ALUDECLARATIE.decnr
LEFT JOIN ALUWERKSOORT ON ALUMUTATIE.wksnr = ALUWERKSOORT.wksnr
INNER JOIN RELATIE Medewerker ON Medewerker.dossiernum = ALUMUTATIE.mdwnr
INNER JOIN RELATIE Klant ON Klant.dossiernum = ALUMUTATIE.cltnr
LEFT JOIN ALUWERKSOORTGROEP ON ALUWERKSOORT.admnr = ALUWERKSOORTGROEP.admnr AND ALUWERKSOORT.wgrnr =
ALUWERKSOORTGROEP.wgrnr
INNER JOIN ALUCLIENT ON ALUCLIENT.relnr = Klant.relnr
WHERE
ALUMUTATIE.corcd = 0 AND
ALUMUTATIE.type = 1 AND
((DatePart(mm, DateAdd(m, -1, ALUDECLARATIE.facdt)) = 1) OR
(DatePart(mm, DateAdd(m, -1, ALUDECLARATIE.datum_aanmaak)) = 1)) AND
((ALUDECLARATIE.facnr IS NULL AND
ALUCLIENT.faccltnr IS NOT NULL) OR
(ALUDECLARATIE.facnr IS NOT NULL) OR
(ALUDECLARATIE.decnr IS NOT NULL))
GROUP BY
ALUMUTATIE.cltnr,
ALUCLIENT.faccltnr,
ALUMUTATIE.wksnr,
Concat(ALUMUTATIE.wksnr, ' - ', ALUWERKSOORT.omsch),
ALUMUTATIE.jaar,
Year(ALUMUTATIE.mudat),
ALUDECLARATIE.decnr,
ALUDECLARATIE.datum_aanmaak,
ALUDECLARATIE.facjr,
ALUDECLARATIE.facdt,
ALUDECLARATIE.facpr,
ALUDECLARATIE.facnr,
ALUWERKSOORTGROEP.wgrnr,
ALUWERKSOORTGROEP.omsch
UNION ALL
SELECT
ALUMUTATIE.cltnr AS klantnummer,
ALUCLIENT.faccltnr,
ALUMUTATIE.wksnr AS uvwcode,
Concat(ALUMUTATIE.wksnr, ' - ', ALUWERKSOORT.omsch) AS UVWOmschrijvingFull,
ALUMUTATIE.jaar AS opdracht,
Year(ALUMUTATIE.mudat) AS MuatieJaar,
ALUDECLARATIE.decnr,
ALUDECLARATIE.datum_aanmaak AS decdt,
ALUDECLARATIE.facjr,
ALUDECLARATIE.facdt,
ALUDECLARATIE.facpr,
ALUDECLARATIE.facnr,
DatePart(mm, ALUDECLARATIE.facdt) - 1 AS Periode,
0 AS Januari,
Sum(ALUMUTATIE.mutbd) AS februari,
0 AS maart,
0 AS april,
0 AS mei,
0 AS juni,
0 AS juli,
0 AS augustus,
0 AS september,
0 AS oktober,
0 AS november,
0 AS december,
ALUWERKSOORTGROEP.wgrnr,
ALUWERKSOORTGROEP.omsch
FROM
ALUMUTATIE
LEFT JOIN ALUDECLARATIE ON ALUMUTATIE.decnr = ALUDECLARATIE.decnr
LEFT JOIN ALUWERKSOORT ON ALUMUTATIE.wksnr = ALUWERKSOORT.wksnr
INNER JOIN RELATIE Medewerker ON Medewerker.dossiernum = ALUMUTATIE.mdwnr
INNER JOIN RELATIE Klant ON Klant.dossiernum = ALUMUTATIE.cltnr
LEFT JOIN ALUWERKSOORTGROEP ON ALUWERKSOORT.admnr = ALUWERKSOORTGROEP.admnr AND ALUWERKSOORT.wgrnr =
ALUWERKSOORTGROEP.wgrnr
INNER JOIN ALUCLIENT ON ALUCLIENT.relnr = Klant.relnr
WHERE
ALUMUTATIE.corcd = 0 AND
ALUMUTATIE.type = 1 AND
((DatePart(mm, DateAdd(m, -1, ALUDECLARATIE.facdt)) = 2) OR
(DatePart(mm, DateAdd(m, -1, ALUDECLARATIE.datum_aanmaak)) = 2)) AND
((ALUDECLARATIE.facnr IS NULL AND
ALUCLIENT.faccltnr IS NOT NULL) OR
(ALUDECLARATIE.facnr IS NOT NULL) OR
(ALUDECLARATIE.decnr IS NOT NULL))
GROUP BY
ALUMUTATIE.cltnr,
ALUCLIENT.faccltnr,
ALUMUTATIE.wksnr,
Concat(ALUMUTATIE.wksnr, ' - ', ALUWERKSOORT.omsch),
ALUMUTATIE.jaar,
Year(ALUMUTATIE.mudat),
ALUDECLARATIE.decnr,
ALUDECLARATIE.datum_aanmaak,
ALUDECLARATIE.facjr,
ALUDECLARATIE.facdt,
ALUDECLARATIE.facpr,
ALUDECLARATIE.facnr,
ALUWERKSOORTGROEP.wgrnr,
ALUWERKSOORTGROEP.omsch
Nu heb van deze query met 12 periodes een VIEW gemaakt. Ik heb een 8 tal vergelijkbare query's met andere WHERE opties waarvan ik ook een VIEW heb gemaakt. Het resultaat wordt weer opgehaald in een andere VIEW. Resultaat is dat het allemaal erg traag is geworden.
Nu heb ik gelezen dat het nesten van VIEWS niet verstandig is, daarom wou ik de query als 1 query gaan maken maar om ik zou dan 8 * 12 = 96 keer een UNION ALL moeten gebruiken. Dus graag een suggestie waarmee dit handiger en met name efficiënter kan.
Alvast bedankt.