2013-07-25 7 views
15

Im Folgenden finden Sie die Listendaten.Gruppieren Sie nach zwei Spalten und zeigen Sie die Gesamtsumme in jeder Zeile an.

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 

Ich brauche ein Ergebnis zu einer Gruppe von Code und nach Art und insgesamt die ItemCount und die Gesamtsumme der Amount in jeder Reihe bekommen.

Ist das möglich?

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

Warum ist alles gleiche Gesamtmenge hat? – hallie

Antwort

22

Bitte versuchen:

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

gruppieren Sie nach itemcount, sind Sie sicher, dass es das richtige Ergebnis geben wird? – Abubakkar

+0

Ja, Sie sind richtig @Abu. Es war ein Fehler. – TechDo

+0

Verwendet diesen Befehl und es funktioniert – user2617053

1

Sie diese Abfrage ausprobieren können:

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

Dies wird Ihnen gewünschte Ergebnis. Sie müssen gruppieren nach Code und Type und nicht ItemCount

3

Das sieht aus wie Hausaufgaben.

(Ich schwöre, ich dachte, das als MySQL markiert wurde, als ich zum ersten Mal die Frage aufgeworfen, aber der Titel zeigt deutlich, MS SQL)

Für MySQL diese Abfrage wird die angegebene Ergebnismenge zurück:

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 

Für andere Datenbanken entfernen Für MySQL die Backticks aus der ganzen Spalte Aliase.

Wenn Sie Groß- und Kleinschreibung beachten müssen, sind die Bezeichner für Oracle in doppelten Anführungszeichen eingeschlossen. Für SQL Server sind Bezeichner in eckigen Klammern eingeschlossen. Für MySQL sind Bezeichner in Backticks eingeschlossen.

0

Die Beträge, die Sie geben aus den Beispieldaten unterscheiden, aber das funktioniert für die Datenwerte Beispiel:

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

Wenn mein Verständnis ist richtig, dass die tatsächliche Summe jeder Zeile ist das Produkt der itemcount und die Menge dann können Sie den folgenden Code verwenden. Wenn nicht, benutze @ Abu's Code.

;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

Sie können diese einfachere Lösung versuchen:

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

die ‚Gruppe‘ zu verstehen wäre kommen praktisch

Verwandte Themen