Avatar billede melieha Nybegynder
30. oktober 2008 - 12:09 Der 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.

Håber i forstår det, og på forhånd tak :)
Avatar billede aaberg Nybegynder
30. oktober 2008 - 12:18 #1
Er det noget lignende dette du leder efter?

select navn, sum(tal) as sum
from tabel
where datepart(month, date) = 9
and datepart(year, date) = 2008
group by navn
Avatar billede aaberg Nybegynder
30. oktober 2008 - 12:19 #2
Denne query tager ud alle rows fra september 2008, og giver en sum af tallet pr navn.
Avatar billede wagner Nybegynder
30. oktober 2008 - 21:31 #3
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.


Wagner
Avatar billede melieha Nybegynder
31. oktober 2008 - 08:46 #4
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 :)
Avatar billede wagner Nybegynder
31. oktober 2008 - 09:31 #5
Hejsa

Prøv evt med denne her.

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'

Wagner
Avatar billede melieha Nybegynder
31. oktober 2008 - 10:00 #6
Det var satans, det ser sq ud til at spille max! Top lækkert, og hastigheden ser det ikke ud til at jeg kan klage over overhovedet :)

Hvis du smider et svar gør du dig fortjent til de fleste points i verden, tusind tak :)
Avatar billede wagner Nybegynder
31. oktober 2008 - 13:32 #7
Det er jeg da glad for at høre.

God weekend.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester