Inner join geeft bij 71 records dubbele of triple values. HELP!

Status
Niet open voor verdere reacties.

Prozac1970

Gebruiker
Lid geworden
9 dec 2007
Berichten
65
Wat doe ik fout...

Ik heb verschillende tabellen en de volgende code:

Code:
Create Table XTBLDoubleABO as (select KDNR as oldclientno, SUM(ROUND(Restwert,2)) as QUANTITY, count(kdnr) as total from winsolar_xtblwdbabo where Restwert > 0 group by kdnr having total >1);

UPDATE xtblpointsledger AS X
INNER JOIN XTBLDoubleABO AS Y ON X.oldclientno = Y.oldclientno
SET X.Quantity = Y.Quantity where Y.QUANTITY < X.Quantity;

Probleem waar ik tegen aanloop, is dat als de KDNR meerdere Restwert values heeft (opgeslagen in de column ABOnr) deze goed worden weer gegeven in de create table XTBLDoubleABO. in de uiteindelijke target tabel wordt de waarde Restwert dubbel weergegeven of triple als de klant (KDNR) meerdere Abonr heeft.

Hoe kan ik dat voorkomen? Er zou 1 totaal opgeslagen moeten worden i.p.v. de dubbele, triple of hoger totaal in de column van de tabel Pointsledger. See below.

Dank voor het meedenken!
 
Laatst bewerkt:
Gaat het niet linksom, dan gaat het wel rechtsom...

Brainwave :thumb:

Code:
  UPDATE XTBLDoubleABO
  SET QUANTITY = (QUANTITY / total);

Solved.

Dank voor het lezen en meedenken...
 
Laatst bewerkt:
Ondanks dat het topic al een maand oud is en je het probleem al opgelost hebt, is het uiteraard niet zo'n nette oplossing. Een nettere oplossing om dubbele waardes in de tabel xtblpointsledger te voorkomen is de query uit te breiden met een LEFT JOIN op de waardes die gecontroleerd moeten worden. Wanneer deze waardes nog niet voorkomen zal de LEFT JOIN gevuld zijn met NULL waardes. Zijn ze wel gevuld dan weet je dat de waarde al voorkomt. Het voorbeeld uit je OP wordt dan iets als:

[cpp]
UPDATE xtblpointsledger AS X
INNER JOIN XTBLDoubleABO AS Y ON X.oldclientno = Y.oldclientno
LEFT JOIN xtblpointsledger AS Z ON Z.oldclientno = Y.oldclientno AND z.Quantity = Y.Quantity
SET X.Quantity = Y.Quantity WHERE Y.QUANTITY < X.Quantity AND Z.oldclientno IS NULL;
[/cpp]

edit: ik neem overigens aan dat die update hier een insert is geweest? Bij een update zouden de rijen er uiteraard al in moeten zitten :p
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan