2016-11-15 3 views
1

Ich habe ein Problem mit einer Abfrage, die doppelte Zeilen für den Primärschlüssel (TransactionID) zeigt, wird direkt aus der adventureWorks-Datenbank entnommen. Grundsätzlich gibt es mehrere Transaktions-IDs für eine bestimmte Transaktion, weil sie mehr als eine Sache gekauft haben, ich versuche nur eine davon zu zeigen und die Summe zusammenzufassen, aber ich kann es nicht tun.Sql Server summieren mehrere Transaktionen durch eine einzige transactionID

SELECT 
    AdventureWorks2014.Sales.SalesOrderHeader.SalesOrderID AS TransactionID, 
    AdventureWorks2014.Sales.SalesOrderHeader.OrderDate, 
    AdventureWorks2014.Sales.SalesOrderDetail.ProductID, 
    AdventureWorks2014.Sales.SalesOrderHeader.TerritoryID, 
    AdventureWorks2014.Sales.SalesOrderDetail.UnitPrice, 
    AdventureWorks2014.Sales.SalesOrderDetail.OrderQty,   
    SUM(AdventureWorks2014.Sales.SalesOrderDetail.UnitPrice * AdventureWorks2014.Sales.SalesOrderDetail.OrderQty) AS Total 
FROM AdventureWorks2014.Sales.SalesOrderHeader 
INNER JOIN AdventureWorks2014.Sales.SalesOrderDetail 
    ON AdventureWorks2014.Sales.SalesOrderHeader.SalesOrderID = AdventureWorks2014.Sales.SalesOrderDetail.SalesOrderID 
GROUP BY AdventureWorks2014.Sales.SalesOrderHeader.SalesOrderID, 
    AdventureWorks2014.Sales.SalesOrderHeader.OrderDate, 
    AdventureWorks2014.Sales.SalesOrderDetail.ProductID, 
    AdventureWorks2014.Sales.SalesOrderHeader.TerritoryID, 
    AdventureWorks2014.Sales.SalesOrderDetail.UnitPrice, 
    AdventureWorks2014.Sales.SalesOrderDetail.OrderQty 
ORDER BY SalesOrderHeader.SalesOrderID ASC 

ich folgendes Ergebnis:

43659 2011-05-31 00:00:00.000 712 5 5,1865 2 10,373 
43659 2011-05-31 00:00:00.000 709 5 5,70 6 34,20 
43659 2011-05-31 00:00:00.000 771 5 2039,994 1 2039,994 
etc. 
+0

Ergebnisdaten klar angeben – Mansoor

Antwort

1

Wenn Sie nur eine Transaktion angezeigt werden soll, das sollte alles, was Sie in Ihrem GROUP BY haben sein:

SELECT soh.SalesOrderID AS TransactionID, 
     SUM(sod.UnitPrice * sod.OrderQty) AS Total 
FROM AdventureWorks2014.Sales.SalesOrderHeader soh INNER JOIN 
    AdventureWorks2014.Sales.SalesOrderDetail sod 
    ON soh.SalesOrderID = sod.SalesOrderID 
GROUP BY soh.SalesOrderID 
ORDER BY soh.SalesOrderID ASC; 

Sie können hinzufügen, in zusätzliche Spalten aus dem Header aber nicht aus dem Detaildatensatz - sowohl in der SELECT als auch der GROUP BY.

Beachten Sie, dass Tabellenaliase die Abfrage einfacher zu schreiben und zu lesen machen.

Verwandte Themen