2011-04-06 10 views
7

Tengo una tabla con la columna a que no tiene necesariamente valores distintos y la columna b tiene para cada valor de un número de valores distintos. Quiero obtener un resultado teniendo cada valor de una aparición solo una vez y obteniendo el primer valor encontrado de b para ese valor de a. ¿Cómo hago esto en sql server 2000?servidor sql obteniendo el primer valor al agrupar

tabla de ejemplo:

a b 
1 aa 
1 bb 
2 zz 
3 aa 
3 zz 
3 bb 
4 bb 
4 aa 

resultado deseado:

a b 
1 aa 
2 zz 
3 aa 
4 bb 

Además, debo añadir que los valores en la columna b son todos los valores de texto. Actualicé el ejemplo para reflejar esto. Gracias

Respuesta

7

SQL no sabe sobre ordenar por filas de tabla. Debe introducir el orden en la estructura de la tabla (generalmente utilizando una columna de identificación). Dicho esto, una vez que tenga una columna de ID, que es bastante fácil:

SELECT a, b FROM test WHERE id in (SELECT MIN(id) FROM test GROUP BY a) 

Podría haber una manera de hacer esto, el uso de las funciones de SQL Server interno. Pero esta solución es portátil y más fácil de entender para cualquiera que conozca SQL.

+2

+1 al mencionar el hecho de que no puede suponer que el orden de los registros sea el mismo que el de las inserciones. –

+0

Utilice el modo CTE. Esta es una forma mucho más ineficiente de hacer esto. –

8
;with cte as 
    (
    select *, 
    row_number() over(partition by a order by a) as rn 
    from yourtablename 
    )  
    select 
a,b 
from cte 
where rn = 1 
+0

Funciona de forma brillante, no sabía nada sobre la función row_number(). –

Cuestiones relacionadas