2012-10-03 12 views
8

Tytuł był trudny do sformułowania, ale pytanie jest dość proste. Przeszukałem wszystko tutaj i nie mogłem znaleźć czegoś dla mojego konkretnego problemu, więc oto jest. Ja usuing Microsoft SQL Server Management Studio 2010.Pole sum SQL, gdy wartości kolumn odpowiadają

Tabela Obecnie wygląda to

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

muszę tabelę, aby pokazać mi, gdzie suma wartości Nazwa produktu spotkania - jak to

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

próbowałem prosty

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

Ale powyższe nie działa. W końcu otrzymuję sumę wszystkich wartości w kolumnie. Jak mogę sumować na podstawie dopasowania nazwy produktu?

Dzięki!

Odpowiedz

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

SQL Fiddle Example

+0

Wiedziałem, że powinno być coś prostego! To działało dobrze. Thanks =) –

2

Zawsze można użyć funkcji zagregowanego (SUM, MIN, MAX ...) z kolumną w rachunku SELECT, należy użyć GROUP BY. Jest to funkcja grupowa, która wskazuje, w której kolumnie należy grupować dane zagregowane. Ponadto, wszystkie kolumny, które nie są w agregacie, nie mogą znajdować się w twoim oświadczeniu SELECT.

Na przykład następująca składnia jest nieprawidłowy, ponieważ jesteś kolumny określające (col2), które nie są skonfigurowane w GROUP BY (choć MySQL pozwala na to):

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

Rozwiązaniem pytaniem byłoby:

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

* Za każdym razem, gdy używasz funkcji agregującej, (SUMA, MIN, MAX ...) musisz użyć GROUP BY. * - To jest nieprawidłowe, możesz chcieć zagregować na całym zestawie lub na części ograniczonej przez klauzula "WHERE". Zobacz [Przykład Fiddle SQL] (http://sqlfiddle.com/#!3/a3366/3/0) – RedFilter

+0

@RedFilter Powinien jawnie stwierdzić, że ma to zastosowanie w przypadku użycia kolumn niezagregowanych na liście 'SELECT'. Zaktualizowałem swoją odpowiedź, aby to odzwierciedlić. – Kermit

Powiązane problemy