Welcome to Sign in | Help

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

  •  06-12-2007, 5:31 PM

    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

View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems