2011-04-21 20 views
8

tengo una tabla con los valores de esta manera:SQL necesario: suma sobre los valores por mes

count1 count2 count3 month 
12  1  4  01/12/2011 
6   5  4  23/12/2011 
14  6  9  11/06/2011 
8   5  4  19/06/2011 

¿Cómo consigo los siguientes resultados?

count1 count2 count3 month 
18  6  8  12 
22  11  13  06 
+0

¿Cuál es el Discrimin ator aqui? ¿Qué diferencia el primer conjunto de resultados del segundo, es esa columna de mes o algo más? –

+0

Por favor, dé un ejemplo de su tabla resultante, relacionada con la primera tabla. Entonces, cualquiera puede entender fácilmente lo que quiere. –

Respuesta

17
SELECT SUM(count1), SUM(count2), SUM(count3), MONTH(month) 
    FROM myTable 
GROUP BY MONTH(month) 

Desde MONTH es una palabra clave de SQL Server, puede que tenga que escapar el nombre de columna month (por ejemplo [month]), si la columna fecha en realidad se llama así. (! Gracias Endy por ese comentario)

Además, si los datos seleccionados abarcan más de un año, es probable que necesites para agrupar por año, así:

SELECT SUM(count1), SUM(count2), SUM(count3), MONTH(month), YEAR(month) 
    FROM myTable 
GROUP BY MONTH(month), YEAR(month) 
+3

Es posible que desee escapar de ese nombre de columna en [mes] –

+0

@AndriyM: ¡gracias por la edición! – Heinzi

0
SELECT SUM(count1), SUM(count2), SUM(count3), MONTH(month) 
FROM Table 
GROUP BY trunc(month,'mm') 

Esto ejecutará en PL/desarrollador de SQL :)

+1

Pero no se ejecutará en SQL Server, que es lo que está usando (de acuerdo con las etiquetas de todos modos). –

+0

ya mike ... puede ser que no ... :) – Avi

+0

Pero siempre es bueno obtener la dosis diaria de PL/SQL, ¡gracias! –

2

reducir la carga de consulta

SELECT SUM(count1), SUM(count2), SUM(count3), substring(month,4,2) 
FROM myTable 
GROUP BY substring(month,4,2)