2013-07-25 14 views
15

Poniżej znajdują się dane listy.Grupuj według dwóch kolumn i wyświetl sumę główną w każdym wierszu.

Code ItemCount Type  Amount 
---------------------------------------- 
B001 1   Dell   10.00 
B001 1   Dell   10.00 
B001 1   Apple  10.00 
B001 2   Apple  20.00 
B001 2   Apple  20.00 
B114 1   Apple  30.50 
B114 1   Apple  10.00 

muszę wynik grupy kodem i według typu i sumie ItemCount i dostać główną łącznie z Amount w każdym rzędzie.

Czy to możliwe?

Code ItemCount Type  Amount 
---------------------------------------- 
B001 2   Dell   20.00 
B001 5   Apple   50.00 
B114 2   Apple   40.50 
+0

Dlaczego to wszystko ma taką samą łączną kwotę? – hallie

Odpowiedz

22

Spróbuj:

SELECT 
    Code, 
    SUM(ItemCount) ItemCount, 
    Type, 
    SUM(Amount) Amount 
FROM 
    YourTable 
GROUP BY Code, Type 
ORDER BY Code 
+0

jesteś zgrupowane według itemcount, czy jesteś pewien, że da właściwy wynik? – Abubakkar

+0

Tak, masz poprawne @Abu. To był błąd. – TechDo

+0

Użył tego polecenia i działa – user2617053

1

Można spróbować to zapytanie:

SELECT Code,SUM(ItemCount) AS ItemCount,Type,SUM(Amount) AS Amount 
FROM 
    table 
GROUP BY Code, Type 

To daje prawidłowe wyniki. Musisz pogrupować według Code i Type, a nie ItemCount

3

To wygląda jak zadanie domowe.

(przysięgam, że to zostało oznaczone jako MySQL kiedy po raz pierwszy spojrzał na pytanie, ale tytuł jasno pokazuje, MS SQL)

dla MySQL, ta kwerenda zwróci określoną resultset:

SELECT t.Code 
    , SUM(t.ItemCount) AS ItemCount 
    , t.Type 
    , s.Amount AS Amount 
    FROM mytable t 
CROSS 
    JOIN (SELECT SUM(r.Amount) AS Amount 
      FROM mytable r 
     ) s 
GROUP 
    BY t.Code 
    , t.Type 
ORDER BY t.Code ASC, t.Type DESC 

przypadku innych baz danych zdjąć do MYSQL odwrócone, pojedyncze apostrofy od około aliasom kolumn.

Jeśli zachodzi potrzeba zachowania sprawy, w przypadku Oracle identyfikatory są ujęte w podwójne cytaty. W przypadku serwera SQL identyfikatory są ujęte w nawiasy kwadratowe. Dla MySQL identyfikatory są zawarte w backtickach.

0

kwot wy dają się różnić od przykładowych danych, ale to działa na wartości danych przykładowych:

SELECT Code, SUM(ItemCount) AS ItemCount, [Type], SUM(Amount) AS Amount 
FROM dbo.TestSubs GROUP BY Code,[Type] ORDER BY Code 
0

Jeśli moje rozumienie jest poprawne, że rzeczywista suma każdego wiersza jest iloczynem ITEMCOUNT oraz kwotę możesz użyć poniższego kodu. Jeśli nie, użyj kodu @ Abu.

;WITH cte AS 
(
    SELECT Code, ItemCount, Type, Amount, ItemCount * Amount AS TotalAmount FROM <Table> 
) 
SELECT 
    Code, 
    SUM(ItemCount), 
    Type, 
    SUM(TotalAmount) 
FROM cte 
GROUP BY Code, Type 
2

Można spróbować to prostsze rozwiązanie:

select Code,sum(ItemCount),Type,sum(Amount) from table group by code,type 

Zrozumienie przez grupę „” przyjdzie przydatny