Discussione:
SUM e GROUP BY
(troppo vecchio per rispondere)
Ettore
2012-03-25 15:03:49 UTC
Permalink
Ciao a tutti,
avrei una query da fare ma non so se sia possibile con un'unica
select. Faccio un esempio:

tabella t_prova
col1 col2 col3
1 a 10
1 b 20
2 a 10
2 b 10
1 c 10

Bene, io devo visualizzare tutti i record così come sono e aggiungere
una quarta colonna che contiene la somma di col3 raggrupandola per
col1, e ordinandola per col2 ovvero:

col1 col2 col3 col4
1 a 10 40
2 a 100 200
1 b 20 40
2 b 100 200
1 c 10 40

Si può fare? Ho cercato in lungo e in largo ma non sono riuscito a
trovare una soluzione.
Grazie mille
Ettore
2012-03-25 15:05:32 UTC
Permalink
Dimenticavo..sto usando access.
Grazie
McX
2012-03-26 11:46:28 UTC
Permalink
Post by Ettore
Bene, io devo visualizzare tutti i record così come sono e aggiungere
una quarta colonna che contiene la somma di col3 raggrupandola per
col1 col2 col3 col4
1 a 10 40
2 a 100 200
1 b 20 40
2 b 100 200
1 c 10 40
Si può fare? Ho cercato in lungo e in largo ma non sono riuscito a
trovare una soluzione.
Grazie mille
Forse non ho capito bene ma questa query su SS

SELECT col1,col2,SUM(col3)
FROM Table_1
GROUP BY col1,col2
WITH ROLLUP


restituisce

1 a 10
1 b 20
1 c 10
1 NULL 40
2 a 10
2 b 10
2 NULL 20
NULL NULL 60


dove la riga con NULL su col2 , indicano le somme parziali
il NULL su col1 e col2 indica la somma totale
Ettore
2012-03-26 16:59:48 UTC
Permalink
Post by McX
Forse non ho capito bene ma questa query su SS
SELECT col1,col2,SUM(col3)
  FROM Table_1
  GROUP BY col1,col2
  WITH ROLLUP
restituisce
1       a       10
1       b       20
1       c       10
1       NULL    40
2       a       10
2       b       10
2       NULL    20
NULL    NULL    60
dove la riga con NULL su col2 , indicano le somme parziali
il NULL su col1 e col2 indica la somma totale
Ciao e grazie dell'interesse,
la select da te postata non è esattamente quello che mi serve; io ho
bisogno che il SUM venga inserito come colonna e non come riga. Ogni
record deve avere una colonna (col4) con il suo rispettivo SUM (se
col1 contiene lo stesso dato presente nella stessa colonna in altre
righe, dovrà dare la rispettiva somma di col3 e visualizzarla in col4
per tutte le righe aventi col1 uguale). L'esempio scritto nel mio
primo post è l'esatto risultato di cui ho bisogno ma non sono riuscito
a creare la select corretta nonostante abbia cercato info in lungo e
in largo per il web.

Grazie dell'aiuto.
Boccia
2012-03-27 08:11:25 UTC
Permalink
Post by Ettore
Post by McX
Forse non ho capito bene ma questa query su SS
SELECT col1,col2,SUM(col3)
  FROM Table_1
  GROUP BY col1,col2
  WITH ROLLUP
restituisce
1       a       10
1       b       20
1       c       10
1       NULL    40
2       a       10
2       b       10
2       NULL    20
NULL    NULL    60
dove la riga con NULL su col2 , indicano le somme parziali
il NULL su col1 e col2 indica la somma totale
Ciao e grazie dell'interesse,
la select da te postata non è esattamente quello che mi serve; io ho
bisogno che il SUM venga inserito come colonna e non come riga. Ogni
record deve avere una colonna (col4) con il suo rispettivo SUM (se
col1 contiene lo stesso dato presente nella stessa colonna in altre
righe, dovrà dare la rispettiva somma di col3 e visualizzarla in col4
per tutte le righe aventi col1 uguale). L'esempio scritto nel mio
primo post è l'esatto risultato di cui ho bisogno ma non sono riuscito
a creare la select corretta nonostante abbia cercato info in lungo e
in largo per il web.
Grazie dell'aiuto.
Ciao!
Non riesco a capire come puoi ottenere questo risultato
col1 col2 col3 col4
1 a 10 40
2 a 100 200
1 b 20 40
2 b 100 200
1 c 10 40

O meglio capisco i valori che hai inserito relativamente al campo
col1=1 (quindi col4 uguale a 40).
non capisco come puoi ottenere i valori relativi a col1=2.
Non dovrebbero essere
2 a 10 20
2 b 10 20
???
Se è questo che vuoi ottenere prova con questa query:

select a.col1,a.col2,a.col3,sum(b.col3) from table_1 a,
table_1 b
where
a.col1=b.col1
group by a.col1,a.col2,a.col3;


questo sarà il risultato ottenuto:
col1 col2 col3 col4
1 a 10 40
1 b 20 40
1 c 10 40
2 a 10 20
2 b 10 20


Ciao
McX
2012-03-27 08:19:20 UTC
Permalink
Post by Ettore
Ciao e grazie dell'interesse,
la select da te postata non è esattamente quello che mi serve; io ho
bisogno che il SUM venga inserito come colonna e non come riga. Ogni
record deve avere una colonna (col4) con il suo rispettivo SUM (se
col1 contiene lo stesso dato presente nella stessa colonna in altre
righe, dovrà dare la rispettiva somma di col3 e visualizzarla in col4
per tutte le righe aventi col1 uguale). L'esempio scritto nel mio
primo post è l'esatto risultato di cui ho bisogno ma non sono riuscito
a creare la select corretta nonostante abbia cercato info in lungo e
in largo per il web.
Grazie dell'aiuto.
Scusami , pensavo ti servisse solo recuperare l'informazione.

PRova questa

SELECT col1, col2,col3, (select SUM(COL3) from table_1 T Where
T.col1=O.col1 ) FROM Table_1 O

Ciao
Albe V°
2012-03-27 11:01:09 UTC
Permalink
Post by Ettore
Ciao a tutti,
avrei una query da fare ma non so se sia possibile con un'unica
tabella t_prova
col1 col2 col3
1 a 10
1 b 20
2 a 10
2 b 10
1 c 10
Bene, io devo visualizzare tutti i record così come sono e aggiungere
una quarta colonna che contiene la somma di col3 raggrupandola per
col1 col2 col3 col4
1 a 10 40
2 a 100 200
1 b 20 40
2 b 100 200
1 c 10 40
Si può fare? Ho cercato in lungo e in largo ma non sono riuscito a
trovare una soluzione.
Grazie mille
SELECT
A.COL1
,A.COL2
,A.COL3
,B.COL4
FROM TABELLA AS A
INNER JOIN
(SELECT COL1, SUM(COL3)
FROM TABELLA
GROUP BY COL1) AS B
ON A.COL1=B.COL1
ORDER BY A.COL2

Alberto
Ettore
2012-03-27 11:42:31 UTC
Permalink
Ok, avete capito quello che intendevo, non mi resta che provare le
varie soluzioni che mi avete postato.
Per ora grazie mille dell'aiuto! :)

Loading...