Avatar billede KOH Novice
27. september 2021 - 22:37 Der er 6 kommentarer

query rownumber

Hej,

Jeg har en tabel med en masse ordre, kunde id er en guid, og jeg skal lave en query der lister alle ordre i en periode, men jeg har behov for at få et fortløbende row nummer på, på den måde at alle ordre fra første kunde har nummer 1, næste kunne skal alle hans ordre have 2 osv.

hvordan fikser jeg den nemmest, tænker vil skal have fat i ROW_NUMBER, men hvordan?
Avatar billede erikjacobsen Ekspert
27. september 2021 - 23:12 #1
Det er vel noget, der ikke strengt nødvendigvis skal lave i SQL, men i MS SQL kan man godt.

Jeg antager din tabel indeholder feltet kundenavn plus et par andre felter, og at nummereringen skal ske i forhold til kundenavn.

SELECT
  row_number() OVER (ORDER BY kundenavn) as raekkenummer,
  kundenavn,adresse,by
  FROM kunder

Du har nok ikke brugt den der "OVER"-notation før.
Avatar billede erikjacobsen Ekspert
27. september 2021 - 23:13 #2
Ups, man kan ikke bare have et felt der hedder "by" på den måde. Brug de feltnavne du har ;)
Avatar billede KOH Novice
28. september 2021 - 07:39 #3
Hej Erik,

Tak for det, nej jeg behøver ikke lavet det i sql'en, kunne sagents skrive det i C# koden, men kan godt lide at udfordre sql sproget lidt - jeg har brugt de funktioner en del gange, men ikke på denne måde - i det eksempel du har skrevet, får jeg et rownumber med men ikke et unikt pr. kunde som jeg har brug for.
Avatar billede KOH Novice
28. september 2021 - 08:38 #4
SELECT
    dense_rank() over(order by customer_guid) ,customer_guid
FROM [tabelx]

denne giver det ønskede resultat, unik id pr. kunde
Avatar billede erikjacobsen Ekspert
28. september 2021 - 08:54 #5
Når customer_guid er unikt burde row_number og rank og dense_rank give det samme ... som jeg forstår det. Det kan være jeg skal lave et lille eksperiment senere ;)
Avatar billede erikjacobsen Ekspert
28. september 2021 - 14:27 #6
Hvis jeg nu forstår dig ret, så optræder hvert kundeid flere gange, og er ikke unik i tabellen. Derfor kan row_number ikke bruges, mens dense_rank giver nedenstående (simplificeret):

(No column name)    navn
1    a
1    a
1    a
1    a
1    a
1    a
2    b
2    b
3    c
3    c
3    c
4    d
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

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