17. december 2012 - 12:45Der er
14 kommentarer og 1 løsning
Top 10 på alle rækker fra ny kolonne
Hejsa!
Jeg prøver at køre en af disse 2 queries:
SELECT distinct a.RaptorCustomerKey ,sum(a.[Price]) as Price ,b.ProductID ,(select distinct b.CategoryID from raptordw.dbo.DimProduct) as CategoryID FROM [RaptorDW].[dbo].[FactPageView] as a join RaptorDW.Dbo.DimProduct as b on a.ProductKey = b.ProductKey where a.raptorcustomerkey = 4 group by b.CategoryID, b.ProductID, a.RaptorCustomerKey, CategoryID
order by SUM(a.Price) desc
select top 10 b.ProductID ,b.CategoryID ,sum(a.price) as Price from RaptorDW.dbo.DimProduct b join RaptorDW.dbo.FactPageview a on a.ProductKey = b.ProductKey where b.CategoryID = '9536' group by b.ProductID, b.CategoryID order by sum(a.price) desc
Det jeg gerne vil have ud er mine top 10 omsatte produkter på alle kategorier der findes.
Den nederste vil give mig top 10 omsatte produkter på en given kategori, men jeg kan ikke få den til at vise top 10 på alle kategorier.
Den øverste gør et eller andet, men den viser for mange produkter.
Det var ikke det du spurgte om, men det ser ud til at der er en en til en relation mellem tabellerne FactsPageView og DimProduct. Det er ikke således, at der til hver række i FactsPageView hører flere rækker i DimProduct og heller ikke således at der til hver række i DimProduct hører flere rækker i FactsPageView. Hvis det er korrekt at der er en en-til-en relation, så vil du sandsynligvis med fordel kunne føje de to tabeller sammen. Det vil forenkle dit arbejde med tabellerne.
Men tilbage til dit spørgsmål: Det står mig ikke helt klart hvad du ønsker at opnå. Vil du for hver kategori have de ti mest omsatte produkter? I så fald, hvis du for eksempel har fem kategorier får du 50 resultater. Eller vil du kun have de overalt ti mest omsatte produkter uanset kategori, hvor du for hvert af disse ti produkter får at vide hvilken kategori det hører til. I så fald vil der være kategorier der ikke får nogen produkter på listen.
Synes godt om
Slettet bruger
17. december 2012 - 14:17#3
Yep. 10 produkter per alle kategorier. Men de 10 produkter skal være de mest omsatte produkter
Vi bliver ved med at krydse hinanden. Men altså for hver kategori vil du have ti produkter, nemlig de ti produkter der for den pågældende kategori er de mest omsatte.
1> CREATE TABLE product ( 2> id INTEGER NOT NULL, 3> price DECIMAL(10,2) NOT NULL, 4> category INTEGER NOT NULL, 5> PRIMARY KEY (id) 6> ) 7> GO 1> 2> CREATE TABLE sale ( 3> id INTEGER NOT NULL, 4> product INTEGER NOT NULL, 5> PRIMARY KEY(id) 6> ) 7> GO 1> 2> INSERT INTO product VALUES(1, 10.0, 1) 3> GO (1 row affected) 1> INSERT INTO product VALUES(2, 11.0, 2) 2> GO (1 row affected) 1> INSERT INTO product VALUES(3, 12.0, 2) 2> GO (1 row affected) 1> INSERT INTO product VALUES(4, 13.0, 3) 2> GO (1 row affected) 1> INSERT INTO product VALUES(5, 14.0, 3) 2> GO (1 row affected) 1> INSERT INTO product VALUES(6, 15.0, 3) 2> GO (1 row affected) 1> INSERT INTO product VALUES(7, 16.0, 4) 2> GO (1 row affected) 1> INSERT INTO product VALUES(8, 17.0, 4) 2> GO (1 row affected) 1> INSERT INTO product VALUES(9, 18.0, 4) 2> GO (1 row affected) 1> INSERT INTO product VALUES(10, 19.0, 4) 2> GO (1 row affected) 1> 2> INSERT INTO sale VALUES(1, 1) 3> GO (1 row affected) 1> INSERT INTO sale VALUES(2, 2) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(3, 2) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(4, 3) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(5, 4) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(6, 4) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(7, 5) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(8, 6) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(9, 6) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(10, 7) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(11, 8) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(12, 8) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(13, 9) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(14, 10) 2> GO (1 row affected) 1> INSERT INTO sale VALUES(15, 10) 2> GO (1 row affected) 1> 2> SELECT product.id,product.category,SUM(product.price) totsal 3> FROM sale JOIN product ON sale.product=product.id 4> GROUP BY product.id,product.category 5> ORDER BY totsal DESC 6> GO id category totsal ----------- ----------- ---------------------------------------- 10 4 38.00 8 4 34.00 6 3 30.00 4 3 26.00 2 2 22.00 9 4 18.00 7 4 16.00 5 3 14.00 3 2 12.00 1 1 10.00
(10 rows affected) 1> 2> SELECT r.id,r.category,r.totsal 3> FROM (SELECT g.id,g.category,g.totsal,RANK() OVER (PARTITION BY g.category ORDER BY g.totsal DESC) catrank 4> FROM (SELECT product.id,product.category,SUM(product.price) totsal 5> FROM sale JOIN product ON sale.product=product.id 6> GROUP BY product.id,product.category) g) r 7> WHERE r.catrank <= 2 8> ORDER BY r.category,r.totsal DESC 9> GO id category totsal ----------- ----------- ---------------------------------------- 1 1 10.00 2 2 22.00 3 2 12.00 6 3 30.00 4 3 26.00 10 4 38.00 8 4 34.00
(7 rows affected) 1> 2> DROP TABLE sale 3> GO 1> DROP TABLE product 2> GO
Synes godt om
Slettet bruger
18. december 2012 - 06:54#10
Forudsætter den her ikke at du har produkter i begge eller er det nok med surrogatnøglen Productkey ?
Synes godt om
Slettet bruger
18. december 2012 - 07:58#11
Nevermind! Jeg fik det til at virke! Det er godt arbejde Arne! Kan du lige ligge et svar evt. -
Kan du evt fortælle mig hvordan jeg løser det her problem?
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.