2012-02-05 9 views
6

Tengo una consulta que devolverá una fila. ¿Hay alguna forma de que pueda encontrar el índice de fila de la fila que estoy consultando cuando la tabla está ordenada?Obteniendo el número de fila para la consulta

He intentado rowid pero obtuve el # 582 cuando esperaba la fila # 7.

Ej:

CategoryID Name    
    I9GDS720K4 CatA 
    LPQTOR25XR CatB 
    EOQ215FT5_ CatC 
    K2OCS31WTM CatD 
    JV5FIYY4XC CatE 
--> C_L7761O2U CatF <-- I want this row (#5) 
    OU3XC6T19K CatG 
    L9YKCYAYMG CatH 
    XKWMQ7HREG CatI 

he intentado rowid con resultados inesperados:

SELECT rowid FROM Categories WHERE CategoryID = 'C_L7761O2U ORDER BY Name 

EDIT: También he probado la sugerencia de J Cooper (abajo), pero los números de fila solo no están bien.

using (var cmd = conn.CreateCommand()) { 
     cmd.CommandText = string.Format(@"SELECT (SELECT COUNT(*) FROM Recipes AS t2    WHERE t2.RecipeID <= t1.RecipeID) AS row_Num 
       FROM Recipes AS t1 
       WHERE RecipeID = 'FB3XSAXRWD' 
       ORDER BY Name"; 
     cmd.Parameters.AddWithValue("@recipeId", id); 
     idx = Convert.ToInt32(cmd.ExecuteScalar()); 
+1

¿Por qué te modificar mi consulta a '... DONDE t2.RecipeID <= t1.RecipeID'? En su pregunta usted está pidiendo el número de fila con respecto a 'Name' no' RecipeID' - es por eso que no está obteniendo buenos resultados, use 'WHERE t2.Name <= t1.Name' en su lugar –

Respuesta

16

Aquí es una manera de conseguir el número de fila en SQLite:

SELECT CategoryID, 
     Name, 
     (SELECT COUNT(*) 
     FROM mytable AS t2 
     WHERE t2.Name <= t1.Name) AS row_Num 
FROM mytable AS t1 
ORDER BY Name, CategoryID; 
+0

Me siento como si ' Estoy haciendo algo mal o me falta una peculiaridad del comportamiento. Los números de fila son todos diferentes, dependiendo de la ID que uso, pero ninguno de ellos es lo que esperaría. ¿Podría tener algo que ver con el uso de cadenas (TEXTO) como columna de ID? – Echilon

+0

¿Por qué modificó mi consulta a '... WHERE t2.RecipeID <= t1.RecipeID'? En su pregunta usted está pidiendo el número de fila con respecto a 'Nombre' no' RecipeID' - es por eso que no está obteniendo buenos resultados, use 'WHERE t2.Name <= t1.Name' en su lugar –

+0

Esto funciona bien, gracias . La clave es ordenar por la columna en la cláusula WHERE. – Echilon

-3

lo que están pidiendo puede explicarse de dos maneras diferentes, pero te estoy suponiendo que desea ordenar la tabla resultante y luego enumerar esas filas según el género.

declare @resultrow int 

select 
     @resultrow = row_number() OVER (ORDER BY Name Asc) as 'Row Number' 
from Categories WHERE CategoryID = 'C_L776102U' 

select @resultrow 
+1

row_number() no está disponible en sqlite –

0

Aquí hay un truco divertido que puede utilizar en Spatialite para obtener el orden de los valores. Si utiliza la función count() con una cláusula WHERE que limita a solo valores> = el valor actual, entonces el recuento realmente dará la orden. Así que si tengo una capa de puntos llamados "MyPoints" con columnas "Valor" y "val_order" a continuación:

SELECT value, (
SELECT count(*) FROM mypoints AS my 
WHERE my.value>=mypoints.value) AS val_order 
FROM mypoints 
ORDER BY value DESC; 

da la orden descendente de los valores. puedo actualizar la columna "val_order" de esta manera:

UPDATE mypoints SET val_order = (
SELECT count(*) FROM mypoints AS my 
WHERE my.value>=mypoints.value 
); 
Cuestiones relacionadas