Avatar billede dennisa Nybegynder
04. december 2009 - 16:31 Der er 8 kommentarer og
1 løsning

Udligning af poster

Fra et gigantisk dataudtræk skal jeg have identificeret poster som kan udlignes automatisk.

Eksempel :

Kundenr  Ordrenr    beløb
100      100        100
100      200        -100

Jeg skal have tilføjet to ekstra kolonner i min datafil, således at filen ser således ud

Kundenr  Ordrenr    beløb  Udlign(J/N)  Udlign Ordrenr
100      100        100    J          200
100      200        -100    J          100

Hvordan gøres det ?
Avatar billede terry Ekspert
04. december 2009 - 17:00 #1
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.
Avatar billede dennisa Nybegynder
04. december 2009 - 17:35 #2
You're right, but with some sort of logic I would like to start with those records with two hits per "kundenr"
Avatar billede terry Ekspert
04. december 2009 - 18:00 #3
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.
Avatar billede 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!
Avatar billede terry Ekspert
05. december 2009 - 10:07 #5
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.
Avatar billede 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.

Det er nok Telia ;)
Avatar billede terry Ekspert
05. december 2009 - 13:35 #7
"udligningsordrenummmer burde være del af den oprindelige datafangst."

I agree totally :o)
Avatar billede dennisa Nybegynder
07. december 2009 - 08:51 #8
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".

Nu mangler "kun" 35.000 poster :-(

Læg venligt et svar
Avatar billede dennisa Nybegynder
29. april 2011 - 17:18 #9
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester