Avatar billede lsskaarup Nybegynder
20. februar 2007 - 15:46 Der er 4 kommentarer og
1 løsning

Summere bestemte men vis alle via join

Jeg har denne sql-sætning, som lige skal fintunes:

SELECT aftaler.sum AS faktureret, o.id AS id, o.ordre AS ordre, o.rev AS rev, WEEKOFYEAR(
o5.r533c
) AS lev, o0.r1 AS projektleder, o0.r9 AS kunde, o0.r18 AS bygherre, r477 AS sumkg, r477a AS sumstaal, r509a AS staalkrkg, r550 AS leveret, r575a
FROM (

SELECT ordreid, SUM( fak_internt ) AS sum
FROM aftaler
WHERE aktkode =225
OR aktkode =226
GROUP BY ordreid
) AS aftaler, ordre0 AS o0
LEFT JOIN ordre AS o ON aftaler.ordreid = o5.id
LEFT JOIN ordre5 AS o5 ON o0.tilbudsnummer = o5.tilbudsnummer
LEFT JOIN ordre4 AS o4 ON o0.tilbudsnummer = o4.tilbudsnummer
WHERE o0.tilbudsnummer = o.id && ( o5.r534 =0 || o5.r534 IS NULL ) && o5.r534a =0 && ( o5.r554 =0 || o5.r554 IS NULL )
ORDER BY IF (
(
o5.r533c =0000 -00 -00 || o5.r533c IS NULL
), 1, 0
), o5.r533c ASC

Mit problem, er at den i aftale-tabellen, kun returnere ordre der har en aktkode på henholdsvis 225 eller 226, så jeg kun får pt. 6 ordre ud fordi de, er de eneste med den rigtige aktkode.

Jeg skal derimod have alle ordre ud, men aftaler.sum AS faktureret, skal kun summere når aktkoden er 225 eller 226
Avatar billede kjulius Novice
20. februar 2007 - 20:16 #1
Er der ikke også et problem med testen på o5.r534a? Skulle du ikke også have testet for Null på det felt? Feltet kommer jo også fra en OUTER JOIN tabel...
Avatar billede kjulius Novice
20. februar 2007 - 20:38 #2
Jeg undres også gevaldigt over, at du angiver ON aftaler.ordreid = o5.id for tabellen "ordre AS o", altså en join-reference som ikke knytter sig til den angivne tabel. Får du slet ingen fejlmeldinger på den?
Avatar billede kjulius Novice
20. februar 2007 - 21:15 #3
Bortset fra det, så skal du vel placere din summering af aftaler på en LEFT JOIN, men jeg kan bare ikke se hvordan referencen er til de andre filer (bortset fra den nævnte til o5 på o, som jeg antager er forkert).
Avatar billede lsskaarup Nybegynder
21. februar 2007 - 12:22 #4
Angående dine 2 første kommentarer så har du ret.
r534a burde også testes for NULL, og o5.id skule have været o.id, men mærkeligt nok fik jeg ingen fejl inden jeg rettede den.

Jeg sidder lige og prøver at opsplitte sql'en, for at finde ud af hvor "de manglende records" bliver fjernet. F.eks. hvis jeg kun tager

SELECT ordreid, SUM( fak_internt ) AS sum
FROM aftaler
WHERE aktkode =225
OR aktkode =226
GROUP BY ordreid

så får jeg alle ordre, også dem hvor sum=0, og den summere kun hvor sktkoden er 225 eller 226
Avatar billede lsskaarup Nybegynder
26. februar 2007 - 12:12 #5
Ja, løsningen er simpel når først man får lidt afstand til det.

I weekenden slog det mig, at det kunne være en kombination af WHERE betingelserne og at brugerne ikke altid udfylder aktkode korrekt... endnu ;-)

Og ganske rigtigt, det var simpelthen derfor jeg ikek fik flere ud ved det oprindelige query, så der var ingen fejl heri alligevel.

Dumme mig
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
Computerworld tilbyder specialiserede kurser i database-management

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