2012-01-05 7 views
6

Considere ejemplo siguiente tabla¿Cómo encontrar el número de fila de un registro?

ProductDetailNo ProductDescription 
     224    Apples 
     225    Tomatoes 
     226    Potatoes 

¿Cómo listar el número de fila de una fila seleccionada como el de abajo?

RowNo ProductDetailNo   Product Description 
    2   225    Tomatoes 

Usando row_number() en mi consulta sólo devuelve siempre 1 para un solo registro sin importar que la fila lógica está en la base de datos.

Gracias, Damien.

+0

row_number() recibe los resultados de la consulta y el número de ellos. Si su consulta solo tiene una fila devuelta, row_number() siempre será 1. http://msdn.microsoft.com/en-us/library/ms186734.aspx –

+0

Gracias por la información de Brandon, pero debe haber una forma –

+0

allí está lejos. Agregue (o use) una clave única a la tabla consultada y use la clave única para retro-referenciar el resultado. Si ProductDetailNo es único, también podría usarlo como referencia. –

Respuesta

10

probar esto

WITH MyTable AS 
(
    SELECT ProductDetailNo, ProductDescription, 
    ROW_NUMBER() OVER (ORDER BY ProductDetailNo) AS 'RowNumber' 
    FROM Product 
) 
SELECT RowNumber, ProductDetailNo  
FROM MyTable 
WHERE ProductDetailNo = 225 
+0

Oye, eso no funciona –

+1

prueba esto. esto devolverá solo una fila y contendrá la última columna Rownum que mostrará su número de fila en los datos –

+0

si tiene algún error, especifique –

0

El número de fila que recibe es a partir del número de las filas de resultado. es decir, si su resultado tiene solo una tupla, la fila no. siempre será 1.

Para obtener el número de fila de toda la tabla, debe agregar un atributo adicional, un RowNo con incremento automático a su tabla.

Espero que esto ayude, pero posiblemente SQL tenga una mejor solución para usted.

+0

Gracias Vinyak no sé para qué era el voto parcial pero sí, todavía tengo la esperanza de algo de magia SQL =) –

2

¿Qué tal este?

SELECT RowNo, ProductDetailNo, ProductDescription 
FROM (SELECT ROW_NUMBER() as RowNo, ProductDetailNo, ProductDescription 
     FROM TheTable) as t 
WHERE ProductDetailNo = 225; 
+0

Eso es excelente, pero la consulta interna se ejecutará para todas las filas en la tabla. ¿Tienes otra solución? –

+1

Bueno, para numerar las cosas, debes conocerlas todas. Es la mejor solución para su pregunta tal como es ahora. –

+1

Por supuesto, el valor devuelto por 'ROW_NUMBER()' podría ser diferente entre cada ejecución de esta consulta, dado que no 'ORDER BY' (¿eso es válido?) –

2

No hay un número de fila inherente para una fila de tabla. ROW_NUMBER() le da el número de la fila solo dentro de un conjunto de resultados específico. Por lo tanto, es el resultado esperado que siempre obtenga 1 cuando el conjunto de resultados contiene solo 1 registro. Si desea un número de fila, su esquema de tabla debe incluir algo así como una columna IDENTITY de incremento automático.

+1

Hola Bobby, hay una forma con SQL. –

3

Selecciona esta

WITH ArticleSearch AS 
    (
     SELECT 
      ROW_NUMBER() OVER 
       (
        ORDER BY tblProducts.ProductDetailNo          
       ) AS RowNumber, 
      tblProducts.ProductDetailNo, 
      tblProducts.ProductDescription  
     FROM   
      tblProducts 
    ) 

    SELECT 
     a.RowNumber AS SlNo, 
     a.ProductDetailNo, 
     a.ProductDescription 
    FROM 
      ArticleSearch a 
    WHERE 
      a.ProductDetailNo=225 
+0

¿Oye, la selección interna se ejecutará para todos los registros? –

2
WITH productCTE 
    AS 
    (SELECT ROW_NUMBER() OVER(ORDER BY ProductDetailNo, ProductDescription) AS RowNo, ProductDetailNo, ProductDescription 
    FROM tbl_Products 
) 
    SELECT * FROM productCTE 
    WHERE RowNo = 2 
Cuestiones relacionadas