Welcome to Sign in | Help
in Search

cum pot numerota ce intoarce un select?!?!?!

Last post 06-13-2007, 8:57 AM by Alex. 5 replies.
Sort Posts: Previous Next
  •  06-12-2007, 4:46 PM 2079

    cum pot numerota ce intoarce un select?!?!?!

    salut, cum pot numerota ce intoarce un select?!?!?! in SQL Server 2000 (in 2005 am vazut ceva row_number)

    am o tabela cu coloanele Nume,Prenume

    CREATE TABLE [dbo].[Table1] (
     [Nume] [nvarchar] (50) NULL ,
     [Prenume] [nvarchar] (50) NULL
    )
    GO

    cum pot afisa dintr-un select * from tabel1 astfel

    ID     Nume    Prenume

    1      nume1    prenume1

    2      nume2    prenume2

    ........

    adica selectul sa-mi mai faca o colana care sa-mi numeroteze

    multumesc

    alex.

  •  06-12-2007, 5:12 PM 2080 in reply to 2079

    Re: cum pot numerota ce intoarce un select?!?!?!

    am gasit :)

    select ( select count(*)
                from   Table1 c
                where  c.nume <= table1.nume)  as rowNumber,*
    from   table1
    order by rowNumber

    alex.

  •  06-12-2007, 5:31 PM 2081 in reply to 2080

    Re: cum pot numerota ce intoarce un select?!?!?!

    Lipseşte ceva important din tabela ta: primary key-ul; şi nu mă refer la o coloană ID, identity, care ar trebui fi primary key doar dacă există o altă cheie unică bazată pe coloane introduse de utilizator. În cazul în care primary key-ul este coloana nume, atunci query-ul găsit de tine este foarte bun. O altă variantă, care merge doar începând din SQL 2005, ar fi:

    SELECT ROW_NUMBER() OVER (ORDER BY Nume) as rowNumber, *
    FROM Persoane
    ORDER BY rowNumber

    Acest query ar rezolva problema şi în cazul în care ar fi mai multe persoane cu acelaşi Nume dar cu Prenume diferite (dându-le rowNumber-uri diferite, dar fără o ordine anume). Dacă vrem să se comporte oarecum asemănător cu query-ul tău, am putea să folosim funcţia RANK în loc de ROW_NUMBER.

    Dacă avem cheia unică Nume+Prenume (aşa cum ar fi normal pentru o astfel de tabelă), ar trebui să luăm în considerare la numerotarea rândurilor ambele coloane. În cazul în care folosim SQL 2005, e banal, punem "OVER (ORDER BY Nume, Prenume)", dar dacă folosim SQL 2000, query-ul se complică puţin:

    SELECT (
        SELECT COUNT(*) FROM Persoane b
        WHERE  b.nume < a.nume
            OR b.nume=a.nume and b.prenume<a.prenume
        )+1  as rowNumber, *
    FROM Persoane a
    ORDER BY rowNumber

    Răzvan

  •  06-12-2007, 5:43 PM 2082 in reply to 2081

    Re: cum pot numerota ce intoarce un select?!?!?!

    Daca lucrezi pe SQL 2000, poti de asemenea:

    1. sa adaugi o coloana IDENTITY(1,1) la tabel

    2. sa inserezi inregistrarile intr-o tablea temporara/variabila tabel cu coloanele ID (---> IDENTITY(1,1)), nume, prenume si sa selectezi de acolo 

  •  06-12-2007, 6:23 PM 2083 in reply to 2082

    Re: cum pot numerota ce intoarce un select?!?!?!

    ...iar intr-un "SELECT INTO" poti folosi si functia IDENTITY()  (---> IDENTITY(int, 1, 1))
  •  06-13-2007, 8:57 AM 2085 in reply to 2082

    Re: cum pot numerota ce intoarce un select?!?!?!

    initial asa am vrut...sa mai adaug o coloana ...era varianta cea mai buna....dar nu am voie sa modific tabela respectiva :(....

    oricum sper sa ma descurc si cu selectul ala :)

    multumesc mult.

    alex.

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems