Agregado: Trabajando con SQL Server 2000 y 2005, por lo que tiene que funcionar en ambos. Además, value_rk no es un número/entero (Error: el identificador único del tipo de datos del operando no es válido para el operador mínimo)Seleccione una columna SQL DISTINCT
¿Hay alguna manera de hacer una sola columna "DISTINCT" coincidir cuando no me importan las otras columnas devueltas ? Ejemplo:
**Table**
Value A, Value L, Value P
Value A, Value Q, Value Z
Necesito devolver solo una de estas filas según lo que está en la primera (Valor A). Todavía necesito resultados de la segunda y la tercera columna (la segunda debería coincidir en todos los ámbitos, pero la tercera es una clave única, de la que necesito al menos uno).
Esto es lo que tengo hasta ahora, a pesar de que, obviamente, no funciona:
SELECT value, attribute_definition_id, value_rk
FROM attribute_values
WHERE value IN (
SELECT value, max(value_rk)
FROM attribute_values
)
ORDER BY attribute_definition_id
estoy trabajando en ColdFusion así que si hay una solución simple, ya que estoy abierto a eso también . Estoy intentando limitar o "agrupar por" la primera columna "valor". value_rk es mi gran problema ya que cada valor es único, pero solo necesito uno.
NOTA: value_rk no es un número, por lo tanto, esto no funciona
ACTUALIZACIÓN: Tengo una versión de trabajo, es probable que sea un poco más lento que una versión de SQL puro, pero la verdad es todo lo que esté en este momento es mejor que nada Toma los resultados de la primera consulta, realiza una segunda consulta, excepto limitar los resultados a uno, y toma una value_rk correspondiente para el valor que coincida. De esta manera:
<cfquery name="queryBaseValues" datasource="XXX" timeout="999">
SELECT DISTINCT value, attribute_definition_id
FROM attribute_values
ORDER BY attribute_definition_id
</cfquery>
<cfoutput query="queryBaseValues">
<cfquery name="queryRKValue" datasource="XXX">
SELECT TOP 1 value_rk
FROM attribute_values
WHERE value = '#queryBaseValues.value#'
</cfquery>
<cfset resourceKey = queryRKValue.value_rk>
...
Así que ahí lo tienes, seleccionando una sola columna distintivamente en ColdFusion. Cualquier sugerencia pura de SQL Server 2000/2005 es aún muy bienvenida :)
¿Puede aclarar lo que necesita? Cualquier fila, pero solo una fila por valor? ¿La fila con el valor que tiene value_rk máximo? No estoy seguro de entender lo que estás buscando aquí. – tvanfosson
> NOTA: value_rk no es un número, por lo tanto, esto NO FUNCIONA. Eso no tiene nada que ver con por qué falla su consulta. No ha mencionado el RDBMS que está utilizando, pero en Oracle puede usar MAX en las columnas de caracteres. –
MS SQL también puede usar MAX en columnas no numéricas. – BradC