Pregunta

Mi jefe me ha asignado una tarea que no estoy seguro de que sea posible ya que después de unas dos semanas, no puedo encontrar una solución, así que estoy descartando esto para pedir cualquier tipo de ayuda del SO grupo. Si esto te rompe el cerebro, te pido disculpas.

Un poco de historia primero: desarrollamos una aplicación de consulta de base de datos que permite a los usuarios recuperar todo lo que quieran de la base de datos sin tener que saber nada de SQL.

Mi problema: queremos personalizar la forma de " Distinto " Se utiliza la selección. En lugar de que la palabra clave distinta se aplique a las filas seleccionadas, queremos que se aplique solo a ciertos campos, para que se utilicen las primeras filas que coincidan con los campos. Por ejemplo:

Bob Jones, 122 Main Street, Portland, OR
Sue Jones, 122 Main Street, Portland, OR
Mary Smith, 458 32nd Street, Portland, OR
Ralph Smith, 458 32nd Street, Portland, OR

queremos que esto funcione para que solo se devuelvan las primeras filas para cada dirección de la siguiente manera:

Bob Jones, 122 Main Street, Portland, OR
Mary Smith, 458 32nd Street, Portland, OR

Con el distintivo normal, se devolverían las cuatro filas, que es más de lo que queremos. ¿Alguien tiene alguna idea de cómo podemos hacer esto? Gracias.

¿Fue útil?

Solución

WITH NumberedRows AS (
   SELECT FirstName, LastName, Address,
          ROW_NUMBER() OVER (PARTITION BY Address ORDER BY Id) as RowNumber
   FROM Table
) SELECT FirstName, LastName, Address
  FROM NumberedRows
  WHERE RowNumber = 1;

PARTITION BY Address especifica la lista de columnas por la que desea agrupar, y ORDER BY ID indica la lista de columnas que define el " primero " elemento con.

(Asegúrese de que la declaración anterior esté terminada con un punto y coma).

Otros consejos

Tiene que ejecutar un "SELECCIONAR DISTINCT" regular " instrucción sql que solo consulta los campos que realmente necesitan ser distintos. Luego, una vez que los recupere, ejecute otra consulta que tome el registro TOP 1 que tenga datos coincidentes para obtener los campos no distintos. Por el momento no veo una manera de hacer esto en una sola declaración SQL ...

SELECT MIN (a.firstname + a.lastname), dirección de x Group By address.

Esa es una respuesta demasiado simplista, pero hace que su punto sea cruzado. solo devolverá el "menor" nombre para cada dirección distinta.

También necesitará usar la concatenación de campos para hacer las distinciones, pero le dará lo que necesita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top