[MSSQL] Query voor om tabellen te combineren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DyArt
  • Registratie: Maart 2003
  • Laatst online: 14:04
Ik heb een probleem waar ik niet uit kom. Ik heb drie tabellen, 1 met historie orders (HISVVI) waarin alles is vermeld incl aantallen en 1 met lopende orders (VKHDR) en een derde tabel die van de lopende orders de bestelregels bijhoudt (VKRGL) . Ik wil graag zien hoeveel er op 1 ordernummer is geleverd en nog te leveren. Het idee is om te kunnen zien hoe de orderinflow is in een bepaalde periode.De tabellen bevatten oa de volgende velden:
Tabel Historie (HISVVI)
ordernummerhoeveelheidOrder aangemaakt
201200150020120101
201200175020120101
201200245020120105


Tabel Lopende orders (VKHDR)
ordernummerorderdatum
201200120120101
201201020120106
201201520120109



Tabel Lopende orders regels (VKRGL)
ordernummerregelnummerAantal besteld
201200111000
20120012500
20120101800
20120151500


Zoals te zien in de historie tabel kan er op 1 ordernummer meerdere keren uitgeleverd zijn, maar bij de lopende orders is het ordernummer uniek.

Nu wil ik graag als resultaat van de query per ordernummer zien hoeveel er totaal besteld is, dus alle historie + eventueel een openstaande aantal nog op het ordernummer.

Ik heb zelf het volgende al uitgezocht als query maar deze gaat fout doordat hij bij elke historie aantal het huidige openstaande aantal weergeeft. Het zou moeten zijn voor order 2012001 (500+750+1000+500), maar mijn query maakt ervan (500+1000+500+750+1000+500) omdat hij een group by maakt van de historie en van de regels. Kan iemand mij op weg helpen om dit probleem op te lossen. Het moet dus een groepering worden van de historie en deze optellen bij de groepering van de juiste orderregels behorende bij het ordernummer van de historie. Als er geen historie order is, dan alleen weergeven wat er in lopend is. Uiteindelijk moet er tevoorschijn komen hoeveel is in een week aan orders is binnengekomen kijkend in eerste instantie naar de VKHDR.DATUMORDER en als deze niet bestaat HISVVI.DATUMAANGEMAAKTORDER

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT  
    CASE  
        WHEN VKHDR.ORDERNUMMER IS NULL THEN HISVVI.VERKOOPORDNR 
        ELSE VKHDR.ORDERNUMMER 
    END AS ORDERNUMMER, 
    CASE  
        WHEN VKHDR.DATUMORDER IS NULL THEN HISVVI.DATUMAANGEMAAKTORDER 
        ELSE VKHDR.DATUMORDER 
    END AS DATUM,
SUM((ISNULL(HISVVI.AANTAL,0)) + (ISNULL(VKRGL.AANTALBESTELD,0))) AS 'AANTAL', Sum(ISNULL(HISVVI.BEDRAG,0)) + Sum(ISNULL(VKRGL.REGELBEDRAG,0)) AS 'WAARDE'
FROM HISVVI
FULL JOIN VKHDR
ON HISVVI.VERKOOPORDNR = VKHDR.ORDERNUMMER
LEFT JOIN VKRGL
ON VKRGL.ORDERNUMMER = VKHDR.ORDERNUMMER
GROUP BY VKHDR.ORDERNUMMER, VKHDR.DATUMORDER, HISVVI.VERKOOPORDNR, HISVVI.DATUMAANGEMAAKTORDER
ORDER BY VKHDR.ORDERNUMMER, HISVVI.VERKOOPORDNR


Ik heb gezocht naar oplossing en geprobeerd het op te lossen met behulp van UNION en CROSS JOIN met heb het nog niet kunnen verhelpen.

Acties:
  • 0 Henk 'm!

  • DyArt
  • Registratie: Maart 2003
  • Laatst online: 14:04
Ik heb het geprobeerd zoals pedorus aangeeft maar ik loop tegen een probleem. Ik blijf maar een foutmelding krijgen "no column name was specified for column 2 ,3 and 4 of 'd' " Ik heb toch echt de kolommen een naam gegeven, zoals in onderstaand te zien is. Waar zit dan toch het probleem?

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
select 
  o.AANTAL, d.AantalOrders, d.Besteld, d.Bedrag
from
  HISVVI o
inner join
(
SELECT VKHDR.ORDERNUMMER, Count(*) AS 'AantalOrders', Sum(VKRGL.AANTALBESTELD) AS 'Besteld', Sum(VKRGL.REGELBEDRAG) AS 'Bedrag'
FROM VKHDR, VKRGL
WHERE VKRGL.ORDERNUMMER = VKHDR.ORDERNUMMER
GROUP BY VKHDR.ORDERNUMMER
) d
on o.VERKOOPORDNR = d.ORDERNUMMER
GROUP BY d.ORDERNUMMER, o.VERKOOPORDNR


als ik alleen de volgende query uitvoer dan werkt het wel
SQL:
1
2
3
4
SELECT VKHDR.ORDERNUMMER, Count(*) AS 'AantalOrders', Sum(VKRGL.AANTALBESTELD) AS 'Besteld', Sum(VKRGL.REGELBEDRAG) AS 'Bedrag'
FROM VKHDR, VKRGL
WHERE VKRGL.ORDERNUMMER = VKHDR.ORDERNUMMER
GROUP BY VKHDR.ORDERNUMMER