none
Como obtengo algunos resultados en una Consulta SQL Server? RRS feed

  • Pregunta

  • Saludos comunidad de genios,

    Estuve navegando por la web sin tener buenos resultados, acudo a alguno de usted para poder solucionar este problema.

    Lo que pasa es que obtengo doble resultado en algunos registros (duplicados) pero la diferencia es que uno tiene seguro y el otro no, además de eso lo que necesito es que me muestre si tiene seguro, si no lo tiene igual debe traerme el registro.

    Ejemplo:

    Nombre Nif Fecha Ciudad Seguro NumeroSeguro
    Maria Ana Lopez 80.234.248 2016-12-02 Cali Mapfre 234-080762123
    Maria Ana Lopez
    80.234.248 2016-12-02 Cali NULL NULL
    Miguel Angel Cordoba 79.324.097 2016-12-07 Bogota NULL NULL

    Probé con Group by, pero no me agrupa nada, soy nuevo en esto del SQL también con "CASE", pero creo que no se bien como se haria así, el resultado que quiero obtener es el siguiente:

    Nombre Nif Fecha Ciudad Seguro NumeroSeguro
    Maria Ana Lopez 80.234.248 2016-12-02 Cali Mapfre 234-080762123
    Miguel Angel Cordoba 79.324.097 2016-12-07 Bogota NULL NULL

    viernes, 30 de diciembre de 2016 12:26

Respuestas

  • Efraín Guzmán Vulpex,

    Entiendo que las propuestas que se te hacen es en base al ejemplo y objetivos que adjuntas, y en particular mi propuesta responde a lo que requieres. Si tienes un contexto distinto al ejemplo que adjuntas entonces tendrías que ajustar la propuesta al caso que presentas, la resolución es simple: agrupar por todas las columnas que contienen valores duplicados y mostrar el máximo valor de las columnas que contienen NULL o un valor, vuelvo a postear el ejemplo, adjunto los mismo datos que has colocado y el resultado:

    DECLARE @T table (Nombre varchar(100), Nif varchar(100), Fecha date, 
    Ciudad varchar(100), Seguro varchar(100), NumeroSeguro varchar(100));
    INSERT INTO @T VALUES
    ('Maria Ana Lopez', '80.234.248', '2016-12-02', 'Cali', 'Mapfre', '234-080762123'),
    ('Maria Ana Lopez', '80.234.248', '2016-12-02', 'Cali', NULL, NULL),
    ('Miguel Angel Cordoba', '79.324.097', '2016-12-07', 'Bogota', NULL, NULL);
    
    SELECT
        t1.Nombre, t1.Nif, t1.Fecha, t1.Ciudad,
        MAX(Seguro) AS [Seguro], MAX(NumeroSeguro) [NumeroSeguro]
    FROM
        @T t1
    GROUP BY
        t1.Nombre, t1.Nif, t1.Fecha, t1.Ciudad;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 30 de diciembre de 2016 16:00

Todas las respuestas

  • Para poder apoyarte en una forma que nos sea comoda y rapida, siempre se solicita que se posteen las estructuras de datos (tablas), con su definicion, asi como data de prueba y la salida esperada.

    "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

    viernes, 30 de diciembre de 2016 14:01
  • Efraín Guzmán Vulpex,

    Agrupa por las cuatro primeras columnas (que se entiende son las que presentan valores duplicados) y las columnas [Seguro] y [NumeroSeguro] recupera el máximo valor:

    SELECT
        t1.Nombre, t1.Nif, t1.Fecha, t1.Ciudad,
        MAX(Seguro) AS [Seguro], MAX(NumeroSeguro) [NumeroSeguro]
    FROM
        NombreTabla t1
    GROUP BY
        t1.Nombre, t1.Nif, t1.Fecha, t1.Ciudad;
    


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 30 de diciembre de 2016 14:44
  • Hola, 

    Ya había probado con Distinc y no cambia en nada, siguen saliendo exactamente los mismos duplicado.

    Gracias por tu respuesta.

    viernes, 30 de diciembre de 2016 15:36
  • Hola, 

    Si también lo hice de esa manera y nada por algún motivo solo me muestra las que tienen algun valor en la columna Seguro y omite las que están en NULL.

    Lo que pasa es que necesito que tenga valor y si no lo tiene también lo necesito, pero sin que se me repitan los registros. 

    Gracias por tu respuesta.

    viernes, 30 de diciembre de 2016 15:39
  • Para poder apoyarte en una forma que nos sea comoda y rapida, siempre se solicita que se posteen las estructuras de datos (tablas), con su definicion, asi como data de prueba y la salida esperada.

    "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

    La tabla que postié, fue un ejemplo pues la verdadera consulta hace referencia a mas de 7 tablas y muchas columnas, pero creo que en el ejemplo se comprende.

    Gracias por tu respuesta.

    viernes, 30 de diciembre de 2016 15:53
  • Efraín Guzmán Vulpex,

    Entiendo que las propuestas que se te hacen es en base al ejemplo y objetivos que adjuntas, y en particular mi propuesta responde a lo que requieres. Si tienes un contexto distinto al ejemplo que adjuntas entonces tendrías que ajustar la propuesta al caso que presentas, la resolución es simple: agrupar por todas las columnas que contienen valores duplicados y mostrar el máximo valor de las columnas que contienen NULL o un valor, vuelvo a postear el ejemplo, adjunto los mismo datos que has colocado y el resultado:

    DECLARE @T table (Nombre varchar(100), Nif varchar(100), Fecha date, 
    Ciudad varchar(100), Seguro varchar(100), NumeroSeguro varchar(100));
    INSERT INTO @T VALUES
    ('Maria Ana Lopez', '80.234.248', '2016-12-02', 'Cali', 'Mapfre', '234-080762123'),
    ('Maria Ana Lopez', '80.234.248', '2016-12-02', 'Cali', NULL, NULL),
    ('Miguel Angel Cordoba', '79.324.097', '2016-12-07', 'Bogota', NULL, NULL);
    
    SELECT
        t1.Nombre, t1.Nif, t1.Fecha, t1.Ciudad,
        MAX(Seguro) AS [Seguro], MAX(NumeroSeguro) [NumeroSeguro]
    FROM
        @T t1
    GROUP BY
        t1.Nombre, t1.Nif, t1.Fecha, t1.Ciudad;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 30 de diciembre de 2016 16:00
  • Saludos William, 

    Debo aclarar que estoy nuevo en esto de SQL y ya habia probado agrupar, sin resultados, pero aun así tu respuesta me trajo la luz, yo estaba agrupando incluyendo [Seguro] [NumeroSeguro]

    t1.Nombre, t1.Nif, t1.Fecha, t1.Ciudad, t1.seguro,t1.NumeroSeguro

    Por eso es que no me funcionaba, pero al leer tu respuesta me hiciste caer en cuenta de que estaba implementando mal la clausula GROUP BY,

    Implemente lo cambios como dijiste y funcionó sin problema, claro esta.... quitando  Seguro y NumSeguro del Group By.

    Muchas Gracias por su ayuda!!!

    Nota: no se si se deba marcar como resuelto o algo así, pero el tema esta resuelto.


    viernes, 30 de diciembre de 2016 18:51
  • Efraín Guzmán Vulpex,

    Precisamente cuando se es nuevo hay que tomar mucha atención al código de ejemplo que se suele proporcionar, como vez no tenía nada de complejo, al agrupar incluso por las columnas [Seguro] y [NumSeguro] no resolvías nada dado que al contener valores distintos  la agrupación nunca se producía (similar efecto que conseguías con DISTINCT). Respecto a marcar la respuesta como correcta, efectivamente es la manera de cerrar el hilo que abriste una vez hayas conseguido resolver el caso que presentas, puedes marcar una o varias respuestas que te hayan ayudado a entender o resolver un problema.

    viernes, 30 de diciembre de 2016 19:36