2011-08-09 5 views
8

Tengo un procedimiento almacenado simple que devuelve registros:Conseguir un recordID en mi SQL consulta de selección

Select empID, EmpFirstName, EmpLastName from EMPLOYEES 

el resultado devuelto es:

EmpID   EmpFirstName  EmpLastName 
    -----   ------------  ----------- 
    30152   John    Smith 
    30114   Tom    Jones 
    56332   Steve    Williams 
    85442   Paul    Johnson 

Lo que necesito es:

RecID  EmpID   EmpFirstName  EmpLastName 
-----  -----   ------------  ----------- 
1  30152   John    Smith 
2  30114   Tom    Jones 
3  56332   Steve    Williams 
4  85442   Paul    Johnson 

¿Cómo puedo obtener la columna recordID?

Gracias

+0

'Select RECID, EMPID, EmpFirstName, EmpLastName de EMPLOYEES'? ¿Cuál es la estructura de tu DB? –

+1

¿Qué está determinando el orden para la asignación de RecID? Ordenado por EmpID, 30114 tendrá RecID = 1. ¿Eso importa? –

+0

Hay una diferencia entre una 'ID' de registro (es decir, algún valor almacenado en su base de datos que identifica positivamente un registro) y un número de línea (que es simplemente un número arbitrario que no necesariamente identificará la misma fila si ejecuta la consulta de nuevo.) ¿Qué es lo que quieres? – Chains

Respuesta

6

probable que desee utilizar Row_Number:

Select ROW_NUMBER() OVER(ORDER BY empID) AS RecId, 
     empID, 
     EmpFirstName, 
     EmpLastName 
from EMPLOYEES 

a menos que haya realmente una columna RecId en EMPLOYEES en cuyo caso no sería más que esto:

Select RecId, 
     empID, 
     EmpFirstName, 
     EmpLastName 
from EMPLOYEES 
+0

¿Qué es empIDDESC? – DotNetRookie

+0

Typo, seguí adelante y lo actualicé. –

+0

bien, eso funciona. Digamos que si no hubiera un empID, ¿qué usaría como "ordenar por"? – DotNetRookie

3

Si' Re usar al menos SQL Server 2005, ROW_NUMBER es lo que necesita.

Ejemplo:

Select 
    row_number() over (order by empID) as RecID, 
    empID, 
    EmpFirstName, 
    EmpLastName 
from 
    EMPLOYEES 

Si está utilizando SQL Server 2000 o mayor, no es por desgracia tan fácil.
SQL Server 2000 no admite ROW_NUMBER, pero hay algunos workarounds para lograr algo similar.
All of them seem to have some drawbacks, though.

Cuestiones relacionadas