2012-10-03 18 views
8

Il titolo era difficile da pronunciare ma la domanda è piuttosto semplice. Ho cercato dappertutto qui e non ho trovato nulla per il mio problema specifico, quindi eccolo qui. Sto usuing Microsoft SQL Server Management Studio 2010.Campo somma SQL quando i valori delle colonne corrispondono a

tabella attualmente assomiglia a questo

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

Ho bisogno tabella di mostrarmi la somma dei valori in cui Nome del prodotto corrisponde - come questo

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

ho provato un semplice

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

ma quanto sopra non funziona. Finisco per ottenere la somma di tutti i valori nella colonna. Come posso sommare in base alla corrispondenza del nome del prodotto?

Grazie!

risposta

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

SQL Fiddle Example

+0

Sapevo che dovrebbe essere qualcosa di semplice! Questo ha funzionato bene. Grazie =) –

2

Ogni volta che si utilizza una funzione di aggregazione, (SUM, MIN, MAX ...) con una colonna nella dichiarazione SELECT, è necessario utilizzare GROUP BY. Questa è una funzione di gruppo che indica in quale colonna raggruppare l'aggregato. Inoltre, tutte le colonne che non sono nell'aggregato non possono essere nell'istruzione SELECT.

Ad esempio, la seguente sintassi non è valida perché sei colonne specificando (col2) che non sono nel vostro GROUP BY (anche se MySQL permette per questo):

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

La soluzione alla tua domanda potrebbe essere:

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

* Ogni volta che si utilizza una funzione di aggregazione, (SUM, MIN, MAX ...) è necessario utilizzare GROUP BY. * - Questo non è corretto, si potrebbe desiderare di aggregare su tutto il set, o su una porzione limitata da una clausola 'WHERE'. Vedi [Esempio di SQL Fiddle] (http://sqlfiddle.com/#!3/a3366/3/0) – RedFilter

+0

@RedFilter Dovrebbe avere esplicitamente dichiarato che questo si applica quando si usano colonne non aggregate nella lista 'SELECT'. Ho aggiornato la mia risposta per riflettere questo. – Kermit

Problemi correlati