none
Registros repetidos en datagridview RRS feed

  • Pregunta

  • Hola!!!

    Esta vez molesto por lo siguiente. Tengo un datagridview que muestra la consulta de una relación de tablas en Sql. El resultado a devolver tiene varios registros repetidos, porque así lo necesito. Por ejemplo, el documento aparece repetido tantas veces sea necesario.

    Mi consulta es, cómo hago para que me muestre el mismo documento repetido 5 veces (por ejemplo), pero una sola vez? He intentado, previa lectura, utilizar DISTINCT (pero me los ordena ¿?) y con GROUP BY me da constantemente error porque no incluí a las otras columnas (¿?).

    Este es el código de la consulta que me da perfecto. Lo que necesito es que de esa consulta me muestre un solo documento si es que se repite varias veces.

    SELECT Alumnos.DNI, (Alumnos.APELLIDOS + ', ' + Alumnos.NOMBRES) as [APELLIDO/S Y NOMBRE/S], Cursos_Index.CURSO, Asigna_Condicion.CONDICION

    FROM Asignaturas_Adeudadas

    INNER JOIN Alumnos ON Asignaturas_Adeudadas.Id_Alumno_Tabla=Alumnos.Id_Alumno

    INNER JOIN Cursos_Index ON Asignaturas_Adeudadas.CURSO=Cursos_Index.Id_Curso

    INNER JOIN Asigna_Condicion ON Asignaturas_Adeudadas.CONDICION=Asigna_Condicion.Id_Condicion

    WHERE Id_Curso= codcurso

    GRACIAS!!!

    Lucho :-)

    ---

    lunes, 12 de febrero de 2018 19:36

Respuestas

  • Ah, si solo necesitas el DOC, entonces suprime los otros campos de la Select y ponle el Distinct:

    SELECT DISTINCT Alumnos.DNI FROM...

    Pero si necesitas alguna otra cosa después del DNI, entonces tienes que tomar alguna decisión acerca de cuál de los valores quieres presentar. Por ejemplo, si tienes esto:

    SELECT DISTINCT Alumnos.DNI, OtraCosa FROM ...

    entonces, ¿qué pasa si para un mismo DNI hay dos valores de OtraCosa? ¿Cuál es tu criterio para decidir cuál de los dos quieres presentar, puesto que solo quieres mostrar el DNI una vez?

    lunes, 12 de febrero de 2018 22:02

Todas las respuestas

  • Si por "documento" te refieres a cada una de las líneas, y no quieres que haya líneas que tengan todos los campos iguales, entonces lo correcto es ponerle un DISTINCT. No te extrañe que te ordene los datos, esto se debe a que tu consulta no tiene un ORDER BY, y en SQL cuando no se escribe ORDER BY el orden es completamente arbitrario y el servidor puede devolver los datos en cualquier orden que le venga bien. Y en el caso del DISTINCT, el orden que le viene bien es el de los datos ordenados, porque al ordenarlos es muy fácil eliminar las repeticiones dado que quedan consecutivas. Si no te gusta el orden que pone SQL, tienes que cambiarlo poniendo ORDER BY; de no hacerlo así, el orden es arbitrario y aunque te parezca que los datos tienen un determinado orden, en realidad puede cambiar en cualquier momento, según vayan modificándose los datos en disco, o según el grado de ocupación de la CPU, según la fragmentación de los índices, etc., etc.
    lunes, 12 de febrero de 2018 20:17
  • Hola Alberto Poblacion!!!

    GRACIAS por tu respuesta.

    Sobre el orden, no me molesta en absoluto, simplemente comentaba lo que yo observaba al utilizar esas claves.

    Respecto a DOCUMENTO, lo dije así genérico porque se que pueden responder desde cualquier país. Documento era en referencia a documento de identidad. Es una tabla que tiene los documentos de identidad repetidos, porque así lo necesito. El tema es que para mostrar el datagrid no quiero se vean todos los documentos repetidos. Eso se podrá hacer luego para otra edición que hace el usuario.

    TABLA ORIGINAL:

    DOC  ASIG COND

    123       1        1
    456       1        2
    123       2        1
    456       1        1
    123       2        2

    LO QUE APARECE EN EL DATAGRIDVIEW:

    DOC  ASIG

    123      1
    456      1
    123      2
    456      1
    123      2

    LO QUE NECESITO:

    DOC

    123
    456

    GRACIAS!!!

    Lucho :-)

    ---


    lunes, 12 de febrero de 2018 20:26
  • Ah, si solo necesitas el DOC, entonces suprime los otros campos de la Select y ponle el Distinct:

    SELECT DISTINCT Alumnos.DNI FROM...

    Pero si necesitas alguna otra cosa después del DNI, entonces tienes que tomar alguna decisión acerca de cuál de los valores quieres presentar. Por ejemplo, si tienes esto:

    SELECT DISTINCT Alumnos.DNI, OtraCosa FROM ...

    entonces, ¿qué pasa si para un mismo DNI hay dos valores de OtraCosa? ¿Cuál es tu criterio para decidir cuál de los dos quieres presentar, puesto que solo quieres mostrar el DNI una vez?

    lunes, 12 de febrero de 2018 22:02