Avatar billede skywalkerdk Nybegynder
11. marts 2006 - 18:27 Der er 5 kommentarer og
1 løsning

SQL med Distinct og sum?

Hey!

Jeg har en database der ser således ud:

::Products::
- ProductID
- ProductName

::Sales::
- SaleID
- SaleItem (Refererer til hvilket produkt der er solgt -> Products.ProductID)
- SaleAmount
- SalePrice

Det jeg vil nu er at trække en liste ud med ALLE produkter og salg hvor der er foretaget nogen.

Altså skulle jeg gerne få en liste som ser således ud:

Fodbold, 100stk, kr. 50,-
Tennisbold, 50stk, kr. 10,-
Fodbold, 20stk, kr. 45,-

Her kan vi se at der er duplikater af "fodbold" fordi salgene bliver skrevet ind i databasen som de kommer.
Bruger jeg "distinct" smider Access de resterende poster ud - Det skal den ikke!

Det resultat jeg søger er:

Badebold, 0,-
Fodbold, 5.000,-
Tennisbold, 500,-

Så alle produkter bliver listet uanset om de er solgt eller ej, og så summen af salgene (Antal * pris) fremgår i anden kolonne.

Det andet resultat jeg søger er:

Salg:
Badebold, 0stk
Fodbold, 150stk
Tennisbold, 50stk

Så jeg kan se hvor mange stk der er solgt af hver.

Er der nogen som kan hjælpe?

~T
Avatar billede fsconsult.dk Nybegynder
11. marts 2006 - 19:10 #1
ved ikke om det virker i accces, men nu har du jo skrevet til MS SQL kategorien:

SELECT p.productname,count(*),sum(s.saleprice)
FROM product p
LEFT JOIN sales s ON s.saleitem=p.productid;

ved ik præcist hvad forskellen på din saleamount og saleprice er.

hvis der ikke er solgt noget af et produkt, får du formentlig null istedetfor 0
Avatar billede skywalkerdk Nybegynder
11. marts 2006 - 21:32 #2
Der er en fejl i linie 1

I Access melder den en fejl, tror det er fordi SUM skal være efter select og ikke kan være i samme sætning som resten herunder:

SELECT Products.ProductName, count(*), sum(Sales.SalePrice)

i samme linie.

~T
Avatar billede skywalkerdk Nybegynder
11. marts 2006 - 21:35 #3
Forresten - SaleAmount er antal af solgte varer, SalePrice er prisen.

~T
Avatar billede ldanielsen Nybegynder
14. marts 2006 - 09:57 #4
SELECT SUM(Sales.SalePrice * Sales.SaleAmount), Products.ProductName
FROM Products LEFT OUTER JOIN Sales
ON Products.ProductID = Sales.SaleItem
GROUP BY Products.ProductID, Products.ProductName


Hvis dette ikke virker er problemet nok at håndtere NULL for de varer der ikke er solgt. Prøv med INNER i stedet for LEFT OUTER, bare for at teste det.

Hvis det er det der er problemet ved jeg ikke lige hvad der skal gøres, for ISNULL fnktionen findes ikke i Access, gør den?

Dette er MSSQL kategorien.
Avatar billede skywalkerdk Nybegynder
14. marts 2006 - 18:22 #5
Excellent! - Det virker! :o)

Tak for hjælpen! - Du skal lige oprette et svar hvis du vil have point.

~Thomas
Avatar billede ldanielsen Nybegynder
16. marts 2006 - 10:31 #6
Tak for det ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester