none
Como seleccionar filas únicas que no se repiten? las que se repiten excluirlas. RRS feed

  • Pregunta

  • Hola, quisiera seleccionar filas únicas con sus respectivos campos de una tabla, solo quiero mostrar esas y excluir de la selección las filas que se repiten. Ejemplo

    A 12 18

    B 15 10

    B 10 12

    C 20 16

    D 14 15

    D 10 14

    De esas filas solo deseo que aparezcan:

    A 12 18

    C 20 16

    Gracias de antemano.

    miércoles, 12 de octubre de 2016 21:39

Respuestas

  • Alvaroux81,

    Puedes hacer lo siguiente (siendo las tres columnas que muestras: Col1, Col2, Col3):

    SELECT
        Col1,
        MAX(Col2),
        MAX(Col3)
    FROM
        T
    GROUP BY
        Col1
    HAVING COUNT(*) = 1;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 12 de octubre de 2016 22:08
  • Hola Alvaroux81,

    Una forma sería :

    DECLARE @T TABLE (LETRA CHAR(1), NUM1 INT, NUM2 INT)
    INSERT INTO @T VALUES ('A',12,18),('B',15,10),
                          ('B',10,12),('C',20,16),
    		      ('D',14,15),('D',10,14)
    
    /* Consulta */
    SELECT *
    FROM @T
    WHERE LETRA IN (SELECT LETRA FROM @T
                    GROUP BY LETRA
    		HAVING COUNT(*) = 1)

    Resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 12 de octubre de 2016 22:06

Todas las respuestas

  • Hola Alvaroux81,

    Una forma sería :

    DECLARE @T TABLE (LETRA CHAR(1), NUM1 INT, NUM2 INT)
    INSERT INTO @T VALUES ('A',12,18),('B',15,10),
                          ('B',10,12),('C',20,16),
    		      ('D',14,15),('D',10,14)
    
    /* Consulta */
    SELECT *
    FROM @T
    WHERE LETRA IN (SELECT LETRA FROM @T
                    GROUP BY LETRA
    		HAVING COUNT(*) = 1)

    Resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 12 de octubre de 2016 22:06
  • Alvaroux81,

    Puedes hacer lo siguiente (siendo las tres columnas que muestras: Col1, Col2, Col3):

    SELECT
        Col1,
        MAX(Col2),
        MAX(Col3)
    FROM
        T
    GROUP BY
        Col1
    HAVING COUNT(*) = 1;


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 12 de octubre de 2016 22:08
  • Muchas gracias, me fueron de mucha ayuda sus aportes, he logrado hacer la consulta, saludos.
    miércoles, 12 de octubre de 2016 22:19
  • Muchas gracias, me fueron de mucha ayuda sus aportes, he logrado hacer la consulta, saludos.

    Por el tipo de consulta al parecer recién te inicias en el desarrollo con t-sql, ¿has entendido lo que se ha realizado?

    La idea es agrupar por la columna donde podrían existir valores iguales, en este caso la columna 'Col1', la cláusula GROUP BY te permite crear grupos basados en una o varias columnas, para nuestro ejemplo crea 4 grupos dado que la columna 'Col1' tiene 4 instancias de valores distintos, el quid del asunto es contar el número de filas que tiene cada grupo formado y tomar únicamente los grupos donde la cantidad de filas sea 1 (HAVING).

    Si aun tienes dudas puedes consultarlo.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 12 de octubre de 2016 22:33