Flaviovich, en la última consulta publicada, antes de agrupar el predicado siempre es true. Pero además, al agrupar debe saltar un error ya que clase y cant no tienen una función de agregado aplicada a dichas columnas.
Moron, no indicaste la versión de SQL Server que usas, pero si estás usando la 2005 o 2008, es muy fácil de solucionar tu problema.
Código:
SELECT seq.grupo, seq.clase, seq.cant
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY grupo ORDER BY indice) AS seq
grupo, clase, cant
FROM tabla
) AS seq
WHERE seq.seq <= 2;
También podrías usar:
Código:
SELECT ref.grupo,
lkp.clase,
lkp.cant
FROM (SELECT DISTINCT grupo FROM tabla) AS ref
CROSS APPLY (
SELECT TOP 2
clase, cant
FROM tabla
WHERE grupo = ref.grupo
ORDER BY indice
) lkp;
Saludos