mogelijk in sql?

Status
Niet open voor verdere reacties.

maurann

Gebruiker
Lid geworden
22 jul 2007
Berichten
117
Besten,

Heb volgende query in sql:
" SELECT Orders.Orderdatum, Orderdetail.Verkoopprijs, Orderdetail.Aantal, [verkoopprijs]*[aantal] AS Som
FROM Orders INNER JOIN Orderdetail ON Orders.Orderid = Orderdetail.OrderId
WHERE (((Orderdetail.Aantal)<>0))
ORDER BY Orders.Orderdatum; "
Deze query berekend per orderdatum (datum+tijd) de som van de verkoopprijs*aantal
Orderdatum Verkoopprijs Aantal Som
11/07/2006 10:12:00 24,95 1 24,95
11/07/2006 10:12:00 40 1 40
11/07/2006 11:09:47 -41 1 -41
11/07/2006 11:09:47 29,95 1 29,95
12/07/2006 10:30:05 8,95 2 17,9

Indien de som negatief is (betekend dat een klant een tegoed heeft),
verrekend hij ook het totaal (bijv som van 11/07 is volgens programma 53.9 terwijl er in de kas die dag 64.95 zit).
Om dit te berekenen zou de query eerst per tijd (datum+tijd) de som moeten maken, indien de som negatief is er geen rekening mee houden, en de optelling per dag maken.

Is dit mogelijk met sql?

PS
de gegevens van datum/tijd in de query zijn afkomstig uit een tabel waarin de datum als standaard datumnotatie is opgeslaan (datum+tijd).

Groeten,

M.
 
Voeg een konditie aan je query toe waarin staat dat de verkoopprijs groter dan nul moet zijn ;)

Grtz,

Tardis
 
Hoi Maurann,

allereerst: ik begrijp iets niet...
Je stelt dat je de positieve waarden wilt optellen van 1 dag -> optelling per dag.
Dus alleen -41 niet. Kortom som van 11/07: 24,95 + 40 + 29,95 = 94,90
En volgens mij is 94,90 <> 64,95. ;)

Of bedoelde je de som van OrderId (datum + tijd)?
Dit is overigens geen kritiek, maar het is me onduidelijk wat jij wilt.


Ik heb natuurlijk beide even uitgewerkt in een voorbeeld.
-QueryOrderPrijs is eigenlijk jouw query.
Ik heb alleen datum met een Format gewijzigd naar datum zonder tijd (voor het leesgemak).
Tevens heb ik de criteria verkoopprijs > 0 ingesteld.
Voor de duidelijkheid een aparte query gemaakt waar ik de som maak van Orderprijs van query 1 (SomvanPositieveOrderPrijs). Een aparte query is niet nodig.
- QryOrderId is de som van Orderprijs per OrderId.
Zoals je ziet komt hier wel 64,95 uit rollen.

Ik hoop dat je hier iets mee kunt.
 

Bijlagen

  • db1.zip
    9,5 KB · Weergaven: 36
Laatst bewerkt:
Bedankt voor je reactie.

Bedankt voor jullie reacties. :thumb:
Bestudeer de queries.

Laat deze avond nog een bericht op helpmij.

Tot dan.

M.
 
Oke mensen,
't werkt, ik slaagde erin met behulp van de datumformat in de query, de juiste sommen te maken.
Nu heb ik echter nog 1 probleempje:
indien ik een rapport maak met als achterliggende query die met de datumformat,
en ik groepeer per datum, dus recentste datum bovenaan gesorteerd,
groepeert hij op basis van de dagen, en nadien pas de maand.
Ik zou willen dat hij de datum sorteert op basis van de dagen.
dus 31/10/2009 30/10/2009 29/10/2009 28/10/2009 enz.
en niet 31/10/2009 31/09/2009 31/08/2009 , enz...

Alvast bedankt.

M.
 
Als je je query gewoon laat lopen over orderdatum, dan kun je sorteren op orderdatum.
Waarschijnlijk heb je eea niet volgens de gegeven tips aangepakt.

Voeg anders even je query bij, in SQL weergave.

Grtz,

Tardis
 
Tardis,
navolgend de queries:

formulier is gebaseerd op volgende query:
SELECT Query14.orderdatum, Sum(Query14.Som) AS Som
FROM Query14
GROUP BY Query14.orderdatum
ORDER BY Query14.orderdatum DESC;

Query14 is :
SELECT Query3.datum AS orderdatum, Sum(Query3.Som) AS Som, Query3.Klantnummer
FROM Query3
GROUP BY Query3.datum, Query3.Klantnummer
HAVING (((Sum(Query3.Som))>0));

Query 3 =
SELECT Orders.Klantnummer, Format([Orderdatum],"dd/mm/yyyy") AS datum, Orderdetail.Verkoopprijs, Orderdetail.Aantal, Sum([verkoopprijs]*[aantal]) AS Som
FROM Orders INNER JOIN Orderdetail ON Orders.Orderid = Orderdetail.OrderId
GROUP BY Orders.Klantnummer, Format([Orderdatum],"dd/mm/yyyy"), Orderdetail.Verkoopprijs, Orderdetail.Aantal
HAVING (((Orderdetail.Aantal)<>0))
ORDER BY Format([Orderdatum],"dd/mm/yyyy") DESC;

Grt,

M.
 
Welke query sorteert niet goed?
Je kunt de derde query als volgt aanpassen:

SELECT Orders.Klantnummer, CDate([Orderdatum]) AS datum, Orderdetail.Verkoopprijs, Orderdetail.Aantal, Sum([verkoopprijs]*[aantal]) AS Som
FROM Orders INNER JOIN Orderdetail ON Orders.Orderid = Orderdetail.OrderId
GROUP BY Orders.Klantnummer, CDate([Orderdatum]), Orderdetail.Verkoopprijs, Orderdetail.Aantal
HAVING (((Orderdetail.Aantal)<>0))
ORDER BY CDate([Orderdatum]) DESC;
 
Beste,

maar dan krijg je weer de vertaling van de orderdatum met tijd en kan ik geen totalen maken per dag.
Met ' FORMAT' krijg ik de data per dag, maar niet gesorteerd op europese wijze maar op amerikaanse wijze, dwz dat de query sorteert eerst op de dag, dan jaar en nadien op maand. Hij zou moeten sorteren op dag volgens maand en jaar.

Is dit te doen?

M.
 
Laatst bewerkt:
Als je Format gebruikt, wordt je datumveld door Access als TEKSTveld gezien, en kun je dus nooit op datumwaarden sorteren. Je zult dus altijd een datum moeten toevoegen aan de query als sorteerveld. Overigens kun je het datumveld er nog een keer extra bijzetten achteraan zodat je er op kunt sorteren, waarbij je de optie Weergeven uitzet.
 
Heb een voorbeeldje ingevoegd, maakt 't eenvoudiger.:)
daarin wordt de selectie gemaakt met 'Format', met CDate slaag ik er niet
in de selectie in de query te sorteren volgens datum.

Misschien wordt 't nu voor mij duidelijk hoe 't moet?

M.
 

Bijlagen

  • db1.zip
    9,3 KB · Weergaven: 26
Met Cdate ziet de query er zo uit:

SELECT CDate([Orderdatum]) AS Datum, Sum([Verkoopprijs]*[Aantal]) AS Orderprijs
FROM TabelOrders INNER JOIN Orderdetail ON TabelOrders.Id = Orderdetail.OrderId
WHERE (((Orderdetail.Aantal)<>0))
GROUP BY CDate([Orderdatum])
HAVING (((Sum([Verkoopprijs]*[Aantal]))>0))
ORDER BY CDate([Orderdatum]);

Omdat je nu weer een echt datumveld hebt (wat waarschijnlijk toch al het geval was, dus je hebt cdate dan helemaal niet nodig...) moet je nog wel de Notatie van het query-veld aanpassen. Zie plaatje
 

Bijlagen

  • Sorteren Cdate.jpg
    Sorteren Cdate.jpg
    53,5 KB · Weergaven: 53
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan