30. oktober 2008 - 12:09Der er
6 kommentarer og 1 løsning
Hente sumeret data for både måned og år.
Hejsa
Jeg har en MS SQL database som indeholder en masse informationer, det jeg er interesseret i er at hente følgende ud. Databasen består af, dato, bruger og antal
Eksempelvis kunne det være 01-02-08, René, 5 14-11-07, René, 10 14-02-08, Peter, 16 08-10-08, René, 9 Og så ganges op med en masse brugere, og en masse indtastninger pr. Bruger, nogen har måske kun en enkelt i år, eller ingen, men mange sidste år.
Det som skal trækkes ud er, sum for i år og sum for denne måned, jeg har forsøgt mig med lidt af hvert, men ikke fundet en løsning jeg synes holdte 100% - Hvis vi ender ud i mere end et databasekald, så skal det huskes at det skal være de samme brugere man hiver informationerne ud på, og i samme rækkefølge, kravet er at det er summen for denne måned for alle brugere med indtastninger, og derudover summen for hele året.
Afhængigt af din datamængde kan det gøres på denne måde. Det er dog ikke optimalt rent performancemæssigt.
select (select sum(tal) from tabel where year(datofelt) = 2008) as sum_per_aar, (select sum(tal) from tabel where year(datofelt) = 2008 and month(datofelt) = 10) as sum_per_maned from tabel where bruger = 'xxx'
En anden måde kunne være at lave et udtræk, der er grupperet pr måned og giver dig tal for hele året, og så kan du i din applikation selv finde sum pr år.
aaberg_cc, det er ikke helt nok, den indeholder kun en sum :)
wagner, det ser meget fornuftigt ud, har dog stadig lidt småproblemer med den, den skal helst trækkes flere brugere på samme tid (Alle dem som nu engang har indtastet i systemet) - Jeg har forsøgt at kæde noget group by ind, men må kan ikke få det til at spille som jeg gerne ville. Håbet er at resultatet så kommer til at give en liste i form af: sum_per_aar, sum_per_maned, bruger xxxxx, xxxx, bruger1 xxxxx,xxxxx, bruger2 xxxxx, xxxx, bruger6 Som så kan manipuleres efter behov på en hjemmeside derefter.
Ideen med at tage pr. Måned og summere senere er umiddelbart mere besværlig, taget i betragning af at der skal sammenlægges for flere brugere, og det rareste er at have det som SQL da der måske vil være fordel i at kunne hive de samme data ud i et andet system senere :) Systemet skal kun bruges af højest et par brugere og kun et par gange om måneden, så en loadtid er ikke umiddelbart årsag til større problemer, så længe vi stadig ikke snakker mere end et par sekunder, mine test' med det SQL du har postet tog "ingen" tid, så det ser fint ud indtil videre :)
select bruger, (select sum(tal) from tabel t2 where year(datofelt) = 2008 and t.bruger = t2.bruger) as sum_per_aar, (select sum(tal) from tabel t3 where year(datofelt) = 2008 and month(datofelt) = 10 and t.bruger = t3.bruger) as sum_per_maned from tabel t where bruger = 'xxx'
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.