Avatar billede dargny Nybegynder
15. juli 2010 - 14:21 Der er 8 kommentarer og
1 løsning

Top 50 varer pr kunde

Jeg skal lave en liste med top 50 varer pr.kunde.

Resultatet skal være top 50 varer pr kunde, og skal give følgende resultat.
Kunde, Varenummer, antal ordrelinjer med det varenummer

Hvordan laver man det i T-SQL?

Informationerne ligger i samme tabel.
Avatar billede Syska Mester
15. juli 2010 - 14:35 #1
SELECT TOP 50 * FROM table1 WHERE kundeid = 10 ORDER BY somevalue DESC

Men uden mere information om hvad der skal sorteres på kommer man nok ikke nærmere ...

mvh
Avatar billede Syska Mester
15. juli 2010 - 14:38 #2
SELECT TOP 50 Kunde, Varenummer, COUNT(Varenummer) FROM table1 WHERE kundeid = 10 GROYP BY Kunde, Varenummer ORDER BY COUNT(Varenummer) DESC

Læste lige lidt nærmere ... så må det være noget ala overstående.
Avatar billede dargny Nybegynder
15. juli 2010 - 14:50 #3
vil top 50 ikke bare give mig de 50 første poster.

Jeg ønsker:

For hver kunde, at få en liste med de 50 bedste varelinjer.


beklager hvis jeg har udtrykt mig uklart.
Avatar billede Syska Mester
15. juli 2010 - 15:23 #4
for en bestemt kunde eller alle kunder ...

hvis alle kunder, vil du jo få mange rows ...

50 * antal af kunder

Og så skal min query laves på en anden måde, så den kun tager 50 for hver kunde ... lidt mere besværligt.

Men har du prøvet mit sidste forslag ?
Avatar billede HenrikSjang Nybegynder
15. juli 2010 - 15:28 #5
En opgave der ligger lige til højrebenet med en cte og en row_number funktion:

;with cte
as (
select
  row_number() over (partition by k.KundeId order by count(*) desc) as rn,
  k.KundeId, v.VareId, count(*) as AntalOrdrer from
  Kunder k
  inner join ordrelinjer ol on ol.KundeId = k.KundeId
  inner join varer v on ol.VareId = v.VareId
group by k.KundeId, v.VareId
)
select KundeId, VareId, AntalOrdrer from cte
where rn <= 50
Avatar billede Syska Mester
15. juli 2010 - 15:37 #6
Hvis du læser hans indlæg, har han kun en table, men ja, klart en CTE som har jeg set dig svare et par steder nu :-)

De er bare ikke helt til mit højre ben endnu.
Avatar billede HenrikSjang Nybegynder
15. juli 2010 - 15:51 #7
Nå ja, der står sørme også at informationerne ligger i samme tabel. My bad :)
Men så er det jo bare at fjerne mine joins, og så skulle det spille.
Avatar billede dargny Nybegynder
16. juli 2010 - 09:25 #8
Sjang, den sad lige i skabet.
Avatar billede HenrikSjang Nybegynder
16. juli 2010 - 11:16 #9
Så kommer jeg med et svar :)
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