access

Tags:    databaser

Hejsa.. håber der er nogen der er villige til at hjælpe med en sql sætning i access.

jeg har 2 tabeller, ordre og ordre detaljer

skal tælle summen af ordre i kr sammen i ordre detaljer tabellen som skal indeles i salg pr. mdr. datoen står i ordre. har lavet følgende:

SELECT Sum(CCur(OrdreArkiv.Pris*[Antal])) AS Produktsalg, DatePart('m',[Dato]) AS ordreMdr, DatePart('yyyy',[Dato]) AS mdraar FROM OrdreHeaderArkiv INNER JOIN OrdreArkiv ON OrdreHeaderArkiv.Id=OrdreArkiv.Ordrenr GROUP BY DatePart('m',[Dato]), OrdreHeaderArkiv.Dato, OrdreHeaderArkiv.Dato ORDER BY DatePart('yyyy',[Dato]) DESC , DatePart('m',[Dato])

den viser summen i kr. pr mdr på en ordre, (se udskrift nederst) det sidste der mangler er altså summen af alle ordre pr. mdr. som i kan nederst er 12. mdr ikke lagt sammen.

Produktsalg ordreMdr mdraar
kr 9.004.991,00 1 2004
kr 120,00 2 2004
kr 300,00 3 2004
kr 1.000,00 4 2004
kr 500,00 5 2004
kr 3.630,00 8 2004
kr 500,00 9 2004
kr 144,00 10 2004
kr 1.000,00 11 2004
kr 1.464,00 12 2004
kr 25,00 12 2004




7 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Dette burde gøre tricket:

SELECT CCur(SUM(OA.Pris * OA.Antal)) as Produktsalg, DatePart('m',OHA.Dato) AS ordreMdr, DatePart('yyyy',OHA.Dato) AS mdraar
FROM OrdreHeaderArkiv OHA, OrdreArkiv OA
WHERE OHA.Id = OA.Ordrenr
GROUP BY DatePart('yyyy',OHA.Dato), DatePart('m',OHA.Dato)
ORDER BY DatePart('yyyy',OHA.Dato) DESC , DatePart('m',OHA.Dato)

Det skal producere grupper efter år/måned og deres sum.

Ved at groupe på året deler man ind i grupper på hvert forskelligt år.
Ved ydermere at groupe på måned bliver hver gruppe samlet efter hvilket år samt hvilken måned den er i, dvs at data med samme år og måned bliver samlet i en og samme gruppe.
Disse grupper behandles med funktionen SUM der for hver gruppe tager summen af udtrykket Pris * Antal.

Altså et enkelt resultat for hver år/måned sæt i dine data.

virker det ikke er der sikkert noget syntax der skal rettes til, men det er måden at løse opgaven på, og det der gør at du har forkerte resultater (for mange resultater) er at du grouper dine data efter den fulde dato, hvilket laver grupper der har præcis samme dato (inklusiv evt tidspunkt) og det er ikke hvad du vil opnå ... men derimod kun samme år og måned.

I rest my case.



Prøv at erstatte 'inner' med 'left outer'

(¯`·._.·[Brian Hvarregaard]·._.·´¯)



Hvis du mener at den samlede sum skal findes, så er det nemmere at gøre dette i asp scriptet, istedet for at gøre det med sql.
Du render jo alligevel igennem alle tallene, så det eneste du skal gøre for at samle totalen er at smide hver sub-total oven i en tæller som du så viser til sidst når loopet er færdigt.

<%
total = 0

....

total = total + subtotal

...

%>
<b>I alt: <%=total%></b>


Forstod jeg problemet korrekt ?



vil have samlet sum pr. månede, ikke ialt. det den finder nu er summen af en bestemt ordre og hvilken månede det er samt år. vil ligge alle ordre sammen i én månede, altså RS består af alle måneder og dens ordre i kr.



Hvad med at lave din group by om til noget i denne stil:

GROUP BY DatePart('yyyy',[OrdreHeaderArkiv.Dato]), DatePart('m',[OrdreHeaderArkiv.Dato])

for den group by du har nu (eller havde da du skrev sidst) havde OrdreHeaderArkiv.Dato (to gange) og datoerne er jo fulde så 2 (eller x) datoer bliver til 2 (eller x) grupper, altså 2 resultater med hver sin sum.

Undgå at groupe på hele datoen ihvertfald.

[Og giv mig de 100 points for det første sql spørgsmål :) ]


http://www.udvikleren.dk/thread.php?techid=12&f=12&t=80

[Redigeret d. 04/08-04 23:12:22 af Jonatan Hertel]



Hejsa..

nej ikke lige det ønsket resultat. Mener at der skal endnu en Sum aktion til. jeg får jo resultatet af ordre regnet ud (antal*pris) og får vist hvilken månede, men fordi der er flere ordre i samme månede kommer der flere resultater. de skal altså bare SUm'mes sammen og så er det klaret. kan det ikke være der skal endnu en select sætning som sum'mer resultatet af første sum sammen. ved bare ik lige hvordan det skal laves..





MERCI!!!

DET VAR DA OK GJORT JEG SIGER TUSIND TAK.. kan altså ikke give dig point'ene fra forrige sql spørgsmål.. Sorry. men du får de 100 her.. OK??



t