Tengo un conjunto de datos y necesito extraer un registro para cada CON/PROPIETARIO/MÉTODO/MATRIZ establecido. Si hay un RESULTADO no nulo, quiero ese. De lo contrario, quiero el que tenga el COUNT más alto. ¿Cómo consulto esto?SQL Server query select 1 de cada subgrupo
CON OWNER METHOD MATRIX RESULT COUNT
*CON_1 OWNER_1 METHOD_A SOLID NULL 503
CON_1 OWNER_1 METHOD_A SOLID NULL 1
*CON_1 OWNER_1 METHOD_A SOIL NULL 1305
CON_1 OWNER_1 METHOD_A SOIL NULL 699
*CON_2 OWNER_2 METHOD_B SOLID 290 687
CON_2 OWNER_2 METHOD_B SOLID NULL NULL
CON_2 OWNER_2 METHOD_B SOLID 450 600
CON_2 OWNER_2 METHOD_B WATER NULL 1
*CON_2 OWNER_2 METHOD_B WATER 400 NULL
para un resultado, me gustaría sólo los registros con estrellas, y yo estoy mostrando cómo cada conjunto se agrupa.
Esto es malo SQL:
select top (1) CON, OWNER, METHOD, MATRIX, RESULT, COUNT
from #TempTable
group by CON, OWNER, METHOD, MATRIX
order by CON, OWNER, METHOD, MATRIX, COUNT
... porque mi recuento no es parte de la función de agregado. Tampoco se trata de que RESULTADO sea NULO o no, y la parte superior (1) no devolverá 1 de cada agrupación. Sin embargo, no he avanzado más utilizando una consulta más compleja (como la basada en la pregunta en How can I select multiple columns from a subquery (in SQL Server) that should have one record (select top 1) for each record in the main query?)
¿Cómo selecciono uno de cada agrupación?
Es difícil elegir cuál aceptar, @siva, @Paul Creasey o @Andrew Lazarus. Todos ayudaron. Andrew's era temprano y estaba muy bien formateado y tenía la mejor clasificación; Siva tuvo el calificador T1.Ranking al final; y Paul fue el primero y me puso en marcha. Di un voto a favor de todos, y ya que Paul's está un poco por delante, lo aceptaré. Pero todos son dignos – thursdaysgeek