Principales respuestas
Seleccionar varios campos con DISTINCT

Pregunta
-
Saludos.
Me podrían ayudar, tengo una tabla que tiene unos 10 campos. De los cuales quiero hacer un DISTINCT de los 4 primeros, pero que me traiga todos los campos de mi tabla.
Ejemplo:
Tabla:
id nombre apellido categoria estado inicial descripcion
1 Juan Perez 2 A P estudiante
1 Juan Perez 2 I P profesor
2 Jose Bermeo 1 A B estudiante
2 Jose Bermeo 1 N O bachiller
EL DISTINCT debería hacerlo por (id,nombre,apellido,categoría), pero trayendo todos mis campos.
debería quedar así la consulta:
id nombre apellido categoria estado inicial descripcion
1 Juan Perez 2 A P estudiante
2 Jose Bermeo 1 A B estudiante
Respuestas
-
Hola Antony
Concuerdo con Javi, de hecho creo que deberias reforzar ciertos conceptos acerca del uso de las funciones de agrupacion y como DISTINCT funciona a nivel interno. Mi mejor recomednacion es el libro de Itzik Ben-Gan, TSQL Fundamentals, te seria de mucho apoyo, en pocas palabras lo que requieres no se puede gestionar en la forma que lo planteas, de hecho no es correcto, por lo que no me viene a la mente una opcion valida, podrias tal vez hacer tu DISTINCT solo de las primeras columnas e insertar el resultado en una variable de tipo tabla y luego una consulta en la que excluyas las columnas agrupadas previamente, pero vamos que no le encuentro mayor utilidad.
"Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net
- Propuesto como respuesta Pablo RubioModerator lunes, 12 de noviembre de 2018 16:19
- Marcado como respuesta Pablo RubioModerator lunes, 19 de noviembre de 2018 17:13
Todas las respuestas
-
Hola Anthonyvtt:
Distinct se aplica a toda la fila.
Lo que estas solicitando es una agrupación de datos, para ello tienes que utilizar funciones de agrupación.
Por ejemplo
declare @table table (id int, nombre varchar(100), apellido varchar(100), categoria int, estado char(1), inicial char(1), descripcion varchar(100)) insert into @table (id, nombre, apellido, categoria, estado, inicial, descripcion) values (1, 'Juan','Perez',2,'A','P','estudiante'), (1,'Juan','Perez',2,'I','P','profesor'), (2,'Jose','Bermeo',1,'A','B','estudiante'), (2,'Jose','Bermeo',1,'N','O','bachiller'); select t.id, t.nombre, t.apellido, t.categoria, min(inicial), min(descripcion) from @table t group by id, nombre, apellido, categoria
No obstante, como puedes ver, de tu ejemplo, no se puede extraer, cual es la causa, por la que el código debe de escoger, el primero de los registros del ID 2.
Además te diría, que todas las filas de una tabla tienen que ser únicas, y de tu ejemplo, eso no parece cumplirse.
Funciones de agregado:
Otro ejemplo práctico para entender mejor el concepto
Espero te ayude.
-
Hola Antony
Concuerdo con Javi, de hecho creo que deberias reforzar ciertos conceptos acerca del uso de las funciones de agrupacion y como DISTINCT funciona a nivel interno. Mi mejor recomednacion es el libro de Itzik Ben-Gan, TSQL Fundamentals, te seria de mucho apoyo, en pocas palabras lo que requieres no se puede gestionar en la forma que lo planteas, de hecho no es correcto, por lo que no me viene a la mente una opcion valida, podrias tal vez hacer tu DISTINCT solo de las primeras columnas e insertar el resultado en una variable de tipo tabla y luego una consulta en la que excluyas las columnas agrupadas previamente, pero vamos que no le encuentro mayor utilidad.
"Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net
- Propuesto como respuesta Pablo RubioModerator lunes, 12 de noviembre de 2018 16:19
- Marcado como respuesta Pablo RubioModerator lunes, 19 de noviembre de 2018 17:13