20. februar 2007 - 15:46Der 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
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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...
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?
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).
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
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
Synes godt om
Ny brugerNybegynder
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.