tblKonti indeholder: - Kontonr - Saldo Een konto med een saldo
tblRykker indeholder: - Kontonr - Dato - Saldo Der kan altså være flere konti med forskellige datoer
Jeg vil så gerne lave et udtræk, som viser: - alle konti - saldoen og datoen for seneste (ift. dato) rykker (hvis der er en rykker - det er ikke altid tilfældet)
Det skal være i en SQL-streng (skal proppes ind i en VB-funktion), og forespørgslen må derfor kun inkludere tabeller.
SELECT tblkontonr.kontonr, max(tblrykker.Dato), tblrykker.saldo FROM tblkontonr INNER JOIN tblrykker ON tblkontonr.kontonr = tblrykker.kontonr GROUP BY tblkontonr.kontonr, max(tblrykker.Dato);
select tblKontonr.Kontonr, tblRykker.dato from tblKontonr, tblRykker where tblKontonr.Kontonr = tblRykker group by tblKontonr.Kontonr having tblRykker.dato = max(tblRykker.dato)
ok du laver 2 queries istedet fordi du ikke kan aggregere paa saldo:
Query1: SELECT tblkonti.Kontonr, Max(tblrykker.dato) AS MaxOfdato FROM tblkonti LEFT JOIN tblrykker ON tblkonti.Kontonr = tblrykker.Kontornr GROUP BY tblkonti.Kontonr;
Query2: SELECT Query1.Kontonr, Query1.MaxOfdato, tblrykker.saldo FROM tblrykker INNER JOIN Query1 ON (tblrykker.dato = Query1.MaxOfdato) AND (tblrykker.Kontornr = Query1.Kontonr);
SELECT tblKonti.Kontonr, tblKonti.Saldo AS Saldo_tblKonti, Sum(tblRykker.Saldo) AS Saldo_tblRykker FROM tblKonti LEFT JOIN tblRykker ON tblKonti.Kontonr = tblRykker.Kontonr GROUP BY tblKonti.Kontonr, tblKonti.Saldo;
SELECT tblKonti.Kontonr, tblKonti.Saldo AS Saldo_tblKonti, Sum(tblRykker.Saldo) AS Saldo_tblRykker, Max(tblRykker.Dato) AS [Seneste rykker] FROM tblKonti LEFT JOIN tblRykker ON tblKonti.Kontonr = tblRykker.Kontonr GROUP BY tblKonti.Kontonr, tblKonti.Saldo;
skwat: der mangler jo saldoen - den kan du ikke inkludere
jensen: læs sp. Den skal ikke sum tblRykker.Saldo
overchord: læs sp. Det skal være en (1) SQL streng, som kun forespørger i tabeller (pga. de relevante tabeller skal gives dynamisk)
OK - bare for at undgå flere misforståelser: Medmindre jeg har overset noget meget logisk, så er det IKKE et sp. om "bare" at trykke på sum-knappen og så aggregere løs! Jeg har løst problemet ved at lave 3Q:
Q1 (finder maks-dato pr. konto) SELECT tblRykker.Konto, Max(tblRykker.Dato) AS MaksOfDato FROM tblRykker GROUP BY tblRykker.Konto;
Q2 (finder saldoen for den pågældende konto på pågældende dato - dvs. maksdato): SELECT Q1.Konto, tblRykker.Dato, tblRykker.Saldo FROM Q1 INNER JOIN tblRykker ON (Q1.Konto = tblRykker.Konto) AND (Q1.MaksOfDato = tblRykker.Dato);
Q3: SELECT tblKONTO.KONTONR, tblKONTO.SALDO, Q2.Dato AS RykkerDato, Q2.Saldo AS RykkerSaldo FROM Q2 RIGHT JOIN tblKONTO ON Q2.Konto = tblKONTO.KONTONR;
Dette giver det rigtige resultat. Hvordan samles ovenstående 3 queryes i een ???
Har læst spørgsmålet, og udført opgaven som spørgsmålet er formuleret ( saldo fremgår at begge tabeller, derfor et resultat med saldo for begge ) ...
Og du kan fortsat nøjes med een query ...
SELECT tblKonti.Kontonr, tblKonti.Saldo AS Saldo_tblKonti, Max(tblRykker.Dato) AS [Seneste rykker] FROM tblKonti LEFT JOIN tblRykker ON tblKonti.Kontonr = tblRykker.Kontonr GROUP BY tblKonti.Kontonr, tblKonti.Saldo;
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.