Avatar billede dex_dexter Nybegynder
25. august 2006 - 11:21 Der er 6 kommentarer og
2 løsninger

gruppere rækker og opsumere

Jeg har et output fra et view der givet dette ud.
_____________
|time count |
|-----------|
|0  | 12  |
|1  | 10  |
|2  | 3    |
|3  | 4    |
|4  | 3    |
|5  | 2    |
|6  | 4    |
|7  | 4    |
|8  | 4    |
|9  | 5    |
|10  | 32  |
|11  | 453  |
|12  | 45  |
|13  | 22  |
|14  | 32  |
|15  | 23  |
|16  | 0    |
|17  | 0    |
|18  | 2    |
|19  | 0    |
|20  | 12  |
|21  | 22  |
|22  | 42  |
|23  | 98  |
|-----------|

nu vil jeg gerne have den til at gruppere rækkerne så den tager rækkerne hvor time er f.eks 22, 23 og 0.
hvordan gør jeg det nemmest?
jeg skal have den til at gøre dette ved alle entries så følgende bliver opsummeret sammen:
01, 02, 03
04, 05, 06
07, 08, 09
osv osv.
Avatar billede thrytter Nybegynder
25. august 2006 - 11:44 #1
SELECT SUM(EtView.count)
FROM EtView
GROUP BY EtView.Time / 3

skulle opsummere
00, 01, 02
03, 04, 05
06, 07, 08
osv
Avatar billede thrytter Nybegynder
25. august 2006 - 11:48 #2
Eller

select    sum(V1.c)
from    (
        select    case when EtView.time = 0
            then 24
            else EtView.time end as t,
            EtView.count As c
        from    EtView
    ) As V1
group by (V1.t-1) / 3

som opsummerer
01, 02, 03
04, 05, 06
osv
Avatar billede dex_dexter Nybegynder
25. august 2006 - 12:23 #3
problemet er at time er et timeantal, så 22, 23 og 0 skal sammen, og 01, 02, 03 skal grupperes
Avatar billede dex_dexter Nybegynder
25. august 2006 - 12:28 #4
hov, havde ikke set din anden post, sorry.

umidbart virker det godt, men jeg kommer lige i tanken om at jeg skal have et id på også,

dvs
22, 23, 0 skal have 0 som id
01, 02, 03 skal have 1
04, 05, 06 skal have 2 osv
.....
19, 20, 21 skal have 7
Avatar billede thrytter Nybegynder
25. august 2006 - 23:44 #5
Følgende skulle virke.

select   
  case min(v1.[t])
    when 22 then 0
    when 1 then 1
    when 4 then 2
    when 7 then 3
    when 10 then 4
    when 13 then 5
    when 16 then 6
    when 19 then 7
    end as [id],
  sum(V1.[c]) as [sum]
from   
(
  select  case when EtView.[time] = 0
            then 24
            else EtView.[time] end as [t],
          EtView.[count] As [c]
  from  EtView
) As V1
group by (V1.[t]-1) / 3
order by [id]
Avatar billede dex_dexter Nybegynder
29. august 2006 - 14:47 #6
det virker nogenlunde, bortset fra at den regner forkert i 0 og 1, tror fejlen ligger i at der bruges min() i id feltet, men er ikke sikker
Avatar billede thrytter Nybegynder
29. august 2006 - 15:18 #7
Vil nu mene at den regner rigtigt!

Id 0 : Time 22+23+00 : Sum = 42+98+12 = 152
Id 1 : Time 01+02+03 : Sum = 10+3+4 = 17
Id 2 : Time 04+05+06 : Sum = 3+2+4 = 9
Id 3 : Time 07+08+09 : Sum = 4+4+5 = 13
Id 4 : Time 10+11+12 : Sum = 32+453+45 = 530
Id 5 : Time 13+14+15 : Sum = 22+32+23 = 77
Id 6 : Time 16+17+18 : Sum = 0+0+2 = 2
Id 7 : Time 19+20+21 : Sum = 0+12+22 = 34

min() bruges ikke i summeringen men kun til udræk af det rigtige id.
Avatar billede dex_dexter Nybegynder
01. september 2006 - 09:11 #8
Du havde ret, det virker, det var dataen i den anden ende der snød mig ;)
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

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