18. september 2008 - 13:10Der er
8 kommentarer og 1 løsning
Forespørgsel på tabeller
Hejsa
Har et udtræk der kører der som sådan virker ok.
Dataene overføres fra en anden DB hver 15 minutter.
Dataene indeholder salgsdata fra en kasse hvor der sælges artikler på.
Når dataene overføres er de summeret op, det vil sige er der solgt 3 armvinger står der 3 i c.stueck osv.
Hvis jeg ved næste overførsel har solgt 2 armvinger mere får jeg en ny record hvor der i c.stueck selvfølgelig står 2.
Kan jeg på en eller anden måde ikke summere op så jeg bare har en record hvor der står 5 i c.stueck?
Mit problem umiddelbart (tror jeg) har at gøre med vkdate som er en dato og klokkeslet der indsættes for hvornår overførslen skete. Jeg kan sagtens undvære denne dato, men så har jeg problemer med HAVING hvor jeg har day(vkdate) osv som sørger for at udtrækket laves på dags dato...
Kan jeg på en eller anden måde summere op?
Udtrækket kører kun en gang om dagen
select DISTINCT b.preisn as PrisNr, c.vkdate as Dato, a.artbez as Type, a.artkbz as Beskrivelse, SUM(c.stueck) as Antal, b.vpreis as Pris, SUM(c.storno) as Annullering, ((c.stueck)-(c.storno)) as TotalAntal, (((c.stueck)-(c.storno))*(b.vpreis)) as TotalPris FROM aart a, vprz b, skab c GROUP BY a.aartnr, a.artbez, a.artkbz, b.preisn, b.vpreis, c.stueck, c.storno, c.aartnr, c.preisn, c.vkdate HAVING a.aartnr = c.aartnr and b.preisn = c.preisn and day(vkdate)=day(getDate()) and month(vkdate)=month(getDate()) and year(vkdate)=year(getDate()) ORDER BY a.artbez
Du siger at det kun køres en gang per dag, men i starten siger du at det overføres hvert 15 min. Det er så bare til en anden table ?
Hvad det du vil opnå i denne anden table ?
Jeg er en smule forvirret over hvad et præcist er du mangler? Da du egentlig skriver at det hele virker ....
Med mindre problemet er følgende: Du henter data fra en anden table som indeholder hvor meget der er solgt de sidste 15 mins. Det vil du have over i en anden table. Du vil kun have en record per dag, dvs findes den record ikke for den type vare skal den oprettes eller skal antallet af varer solgt de sidste 15 mins tilføjes.
Når dataene overføres er de summeret op, det vil sige er der solgt 3 armvinger står der 3 i c.stueck osv.
Hvis jeg ved næste overførsel har solgt 2 armvinger mere får jeg en ny record hvor der i c.stueck selvfølgelig står 2.
Kan jeg på en eller anden måde ikke summere op så jeg bare har en record hvor der står 5 i c.stueck?
Mit problem umiddelbart (tror jeg) har at gøre med vkdate som er en dato og klokkeslet der indsættes for hvornår overførslen skete. Jeg kan sagtens undvære denne dato, men så har jeg problemer med HAVING hvor jeg har day(vkdate) osv som sørger for at udtrækket laves på dags dato...
Fejlen ligger i at du har c.vkdate med i din group by klausul. (desuden har jeg tilføjet SUM til dine udregninger af totaler - er det ikke mere rigtigt?):
select DISTINCT b.preisn as PrisNr, max(c.vkdate) as Dato, a.artbez as Type, a.artkbz as Beskrivelse, SUM(c.stueck) as Antal, b.vpreis as Pris, SUM(c.storno) as Annullering, (SUM(c.stueck)-SUM(c.storno)) as TotalAntal, (SUM(c.stueck)-SUM(c.storno))*(b.vpreis)) as TotalPris FROM aart a, vprz b, skab c GROUP BY a.aartnr, a.artbez, a.artkbz, b.preisn, b.vpreis, c.stueck, c.storno, c.aartnr, c.preisn HAVING a.aartnr = c.aartnr and b.preisn = c.preisn and day(vkdate)=day(getDate()) and month(vkdate)=month(getDate()) and year(vkdate)=year(getDate()) ORDER BY a.artbez
Får denne fejl: Server: Msg 8121, Level 16, State 1, Line 1 Column 'c.vkdate' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause. Server: Msg 8121, Level 16, State 1, Line 1 Column 'c.vkdate' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause. Server: Msg 8121, Level 16, State 1, Line 1 Column 'c.vkdate' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause.
Korrekt vkdate skal også lige flyttes fra HAVING klausulen:
select DISTINCT b.preisn as PrisNr, max(c.vkdate) as Dato, a.artbez as Type, a.artkbz as Beskrivelse, SUM(c.stueck) as Antal, b.vpreis as Pris, SUM(c.storno) as Annullering, (SUM(c.stueck)-SUM(c.storno)) as TotalAntal, (SUM(c.stueck)-SUM(c.storno))*(b.vpreis)) as TotalPris FROM aart a, vprz b, skab c WHERE day(c.vkdate)=day(getDate()) AND month(c.vkdate)=month(getDate()) AND year(c.vkdate)=year(getDate()) GROUP BY a.aartnr, a.artbez, a.artkbz, b.preisn, b.vpreis, c.stueck, c.storno, c.aartnr, c.preisn HAVING a.aartnr = c.aartnr AND b.preisn = c.preisn ORDER BY a.artbez
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.