|
| MS SQL: Sum af ordrelinier Fra : MKJ |
Dato : 05-10-05 16:53 |
|
Hej
Jeg er ved at lave en SELECT der kan liste summen af alle ordrelinier i
en ordre, jeg har lift problemer med GROUP BY. Min SELECT ser indtil
videre sådan ud:
SELECT OrderID AS Expr1, SUM(UnitCost) * Quantity
FROM OrderDetails
GROUP BY OrderID, Status, Quantity
HAVING (Status = 300)
ORDER BY OrderID
Som det fremgår indeholder OrderDetails følgende felter: OrderId,
UnitCost, Quantity. UnitCost er prisen og Quantity det bestilte antal.
Problemet er at når der er flere ordrelinier på eén ordre og Quantity er
forskellig får jeg ikke et samlet resultat men et resultat for alle
ordrelinier hvor Quantiy er 1 og et andet resultat hvor Quantity er 2
osv. Det er jo logisk nok men hvordan får jeg samlet hele summen i et
resultat?
--
MKJ
| |
MKJ (05-10-2005)
| Kommentar Fra : MKJ |
Dato : 05-10-05 17:05 |
|
MKJ wrote:
> Hej
>
>
> SELECT OrderID AS Expr1, SUM(UnitCost) * Quantity
> FROM OrderDetails
> GROUP BY OrderID, Status, Quantity
> HAVING (Status = 300)
> ORDER BY OrderID
Løsning fundet:
SELECT OrderID AS OrderId, SUM(UnitCost * Quantity) AS Total
FROM OrderDetails
GROUP BY OrderID, Status
HAVING (Status = 300)
ORDER BY OrderID
| |
Peter Brodersen (05-10-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 05-10-05 17:05 |
|
On Wed, 05 Oct 2005 17:52:32 +0200, MKJ <m@ds.dk> wrote:
>Jeg er ved at lave en SELECT der kan liste summen af alle ordrelinier i
>en ordre, jeg har lift problemer med GROUP BY. Min SELECT ser indtil
>videre sådan ud:
>
>SELECT OrderID AS Expr1, SUM(UnitCost) * Quantity
>FROM OrderDetails
>GROUP BY OrderID, Status, Quantity
>HAVING (Status = 300)
>ORDER BY OrderID
Undlad at GROUP BY på Quantity, og smid den ind i din SUM()?
SELECT OrderID AS Expr1, SUM(UnitCost * Quantity)
I princippet kan du også undlade Status i din GROUP BY, ved at smide
den ind i en WHERE-clause i stedet for HAVING. Det kan også gøre
afviklingen hurtigere.
--
- Peter Brodersen
| |
|
|