From you "gigantisk dataudtræk" your only showing 2 records but I can imagine that a "kundenr" has in some cases more than two records (Ordrenr) and that would make things more complicated.
If I get a bit of time I'll see if I can come up with something.
I may be wrong but I dont think its so easy to do.
Synes godt om
Slettet bruger
04. december 2009 - 18:03#4
de to nye felter oprettes manult
Følgende update på selfjoin
UPDATE (SELECT * FROM Kontering AS k1 INNER JOIN Kontering AS k2 ON (k1.[beløb] = -k2.[beløb]) AND ([k1].kundenr=k2.kundenr)) SET k1.udlignordrenr = k2.ordrenr, k1.erUdlignet = true;
laver opdateringen på par med modsat bel for samme kunde. Blandt så stor en datamængde kan jeg sagtens forstille mig at der er mere en 2 match på (kundenr,beløb)=(kundenr,-beløb) og så virker det ikke efter hensigten!
Ellebes SQL looks as though it would work but as we both indicate its only going to work if there are only max two ordrenr for a kunde and where they can "udlingn" each other.
As soon as there are more than two then you have no way of knowing which ordre "udlign" each other.
So if you can make use of ellebes SQL then you should only use it in the case where there are only two ordrenr for a kunde.
You could do that by making an SQL grouping on Kunde with count on ordrenr and check if there are two. Then use this query in ellebes with an INNER join on kundenr.
Synes godt om
Slettet bruger
05. december 2009 - 12:55#6
Det er "(kundenr,abs(beløb)) par" der ikke må være mere end 2 af -der kan sagtens være flere end 2 kundeNr for at kommentar#4 sql virker - til illustation er denne datamængde ok:
kundenr ordrenr beløb erUdlignet udlignordrenr 50 50 50 Nej 70 70 70 Ja 73 100 100 100 Ja 110 70 73 -70 Ja 70 40 40 40 Nej 100 110 -100 Ja 100 100 120 20 Ja 130 100 130 -20 Ja 120
Nu har Access sådan nogle aggreatfunktioner der kan, omend ineffektivt kørselsmæssigt, gøre det lettere at udtrykke sig:
UPDATE (SELECT * FROM Kontering AS k1 INNER JOIN Kontering AS k2 ON (k1.[beløb] = -k2.[beløb]) AND ([k1].kundenr=k2.kundenr) where dcount("*","Kontering","kundenr=" & [k1].kundenr & " and abs([beløb])=" & abs([k1].[beløb]))=2 ) SET k1.udlignordrenr = k2.ordrenr, k1.erUdlignet = true;
--------------------- Men ..., det er noget rod, at ligge inde med en omtalte datamængde overhovedet, udligningsordrenummmer burde være del af den oprindelige datafangst.
Tak for en brugbar løsning ( ellebe ), og jeg er enig i betragtningen om at det er noget rod.
Vores SQL udligningsrutine i forbindelse med vores debitorer har fejlet totalt på omkring 150.000 poster, og jeg forsøger at redde hvad kan reddes sådan mere eller mindre "semiautomatisk".
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.