2012-10-03 19 views
8

El título era difícil de encontrar pero la pregunta es bastante simple. Busqué por todas partes y no pude encontrar algo para mi problema específico, así que aquí está. Estoy usuing Microsoft SQL Server Management Studio 2010.Campo suma de SQL cuando los valores de columna coinciden

Tabla Actualmente tiene este aspecto

| Value | Product Name| 
    | 300 | Bike  | 
    | 400 | Bike  | 
    | 300 | Car   | 
    | 300 | Car   | 

necesito la mesa para mostrar la suma de los valores en que coincide con el nombre del producto - como esto

| TOTAL | ProductName | 
    | 700 | Bike  | 
    | 600 | Car   | 

he intentado un simple

SELECT 
     SUM(Value) AS 'Total' 
     ,ProductName 
FROM TableX 

Pero lo anterior no funciona. Termino obteniendo la suma de todos los valores en la columna. ¿Cómo puedo resumir según la coincidencia de nombre del producto?

Gracias!

Respuesta

11
SELECT SUM(Value) AS 'Total', [Product Name] 
FROM TableX 
GROUP BY [Product Name] 

SQL Fiddle Example

+0

¡Sabía que debería ser algo simple! Esto funcionó bien. Thanks =) –

2

Cada vez que se utiliza una función de agregado, (SUM, MIN, MAX ...) con una columna en la sentencia SELECT, debe utilizar GROUP BY. Esta es una función de grupo que indica por qué columna agrupar el agregado. Además, las columnas que no están en el agregado no pueden estar en su declaración SELECT.

Por ejemplo, la siguiente sintaxis no es válida, ya que son las columnas que especifican (col2) que no están en su GROUP BY (a pesar de que MySQL, permite esto):

SELECT col1, col2, SUM(col3) 
FROM table 
GROUP BY col1 

La solución a su pregunta sería:

SELECT ProductName, SUM(Value) AS 'Total' 
FROM TableX 
GROUP BY ProductName 
+0

* Cada vez que use una función de agregado, (SUMA, MIN, MAX ...) debe usar GROUP BY. * - Esto es incorrecto, es posible que desee agregar en todo el conjunto, o en una parte restringida por una cláusula 'WHERE'. Ver [SQL Fiddle Example] (http://sqlfiddle.com/#!3/a3366/3/0) – RedFilter

+0

@RedFilter Debería haber declarado explícitamente que esto se aplica cuando se usan columnas no agregadas en la lista 'SELECT'. He actualizado mi respuesta para reflejar esto. – Kermit

Cuestiones relacionadas