none
Seleccionar varios campos con DISTINCT RRS feed

  • 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


    lunes, 12 de noviembre de 2018 6:30

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

    lunes, 12 de noviembre de 2018 8:16

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:

    https://docs.microsoft.com/es-es/sql/t-sql/functions/aggregate-functions-transact-sql?view=sql-server-2017

    Otro ejemplo práctico para entender mejor el concepto

    https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Agrupaciones-y-funciones-de-agregacion.aspx

    Espero te ayude.

    lunes, 12 de noviembre de 2018 6:46
  • 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

    lunes, 12 de noviembre de 2018 8:16