Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

eliminar registros repetidos (no pk)

Estas en el tema de eliminar registros repetidos (no pk) en el foro de SQL Server en Foros del Web. hola, estoy haciendo un reporte , que consta en sacar las emfermedades mas tratadas en el año, los campos de la tabla son cuando clienteid ...
  #1 (permalink)  
Antiguo 18/01/2012, 08:32
Avatar de robertgustavo  
Fecha de Ingreso: marzo-2008
Ubicación: Camaná - Arequipa
Mensajes: 213
Antigüedad: 16 años, 1 mes
Puntos: 4
De acuerdo eliminar registros repetidos (no pk)

hola, estoy haciendo un reporte , que consta en sacar las emfermedades mas tratadas en el año, los campos de la tabla son



cuando clienteid y diagnosticoId se repiten, es que se trata de un solo paciente que ha venido varias veces por una emfermedad, pero todo en conjunto es el caso de una persona, lo que se quiere es de todas las persomas, las emfermedades mas tratadas, lo que pensaba es quitar los registros (clienteid y diagnosticoId )repetidos. estube haciendo varias pruebas pero no doy. Espero puedan ayudarme, saludos y gracias de antemano
__________________
Soluciones basadas en .NET Framework y SQL Server
  #2 (permalink)  
Antiguo 18/01/2012, 09:23
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: eliminar registros repetidos (no pk)

puedes hacerlo con un row_number() o con un count agrupado por los campos que necesitas donde el count sea mayor a 0

select count(*) from tabla group by campo having count(*) >1

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 18/01/2012, 10:48
Avatar de robertgustavo  
Fecha de Ingreso: marzo-2008
Ubicación: Camaná - Arequipa
Mensajes: 213
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: eliminar registros repetidos (no pk)

Cita:
Iniciado por Libras Ver Mensaje
puedes hacerlo con un row_number() o con un count agrupado por los campos que necesitas donde el count sea mayor a 0

select count(*) from tabla group by campo having count(*) >1

saludos!
hola, gracias por la ayuda, estube haciendo unas pruebas, pero aun no lo logro, podrias plantearme algo mas claro, con los campos de tabla que aparecen en las imagenes??, gracias.
__________________
Soluciones basadas en .NET Framework y SQL Server
  #4 (permalink)  
Antiguo 18/01/2012, 11:21
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: eliminar registros repetidos (no pk)

Hola robertgustavo:

Veamos si entendí correctamente el problema:

Supongamos que tu tabla tiene la siguiente información:

Código:
id          usuario    diagnostico
----------- ---------- -----------
1           uno        Bronquitis
2           uno        Presión
3           dos        Presión
4           dos        Presión
5           dos        Presión
6           tres       Bronquitis
7           dos        Bronquitis
8           dos        Presión
9           tres       Asma
10          uno        Bronquitis
Si buscamos sólo por diagnóstico, obtendríamos lo siguiente:

Código:
select diagnostico, count(diagnostico) total from @Tabla 
group by diagnostico order by 2 desc

diagnostico total
----------- -----------
Presión     5
Bronquitis  4
Asma        1
Esto indicaría que el diagnóstico PRESIÓN fue el más recurrente, sin embargo, si analizamos la información, podemos ver que el usuario DOS fue diagnosticado 4 veces con PRESIÓN:

Código:
select usuario, diagnostico, count(*) from @Tabla 
group by usuario, diagnostico
order by usuario, diagnostico

usuario    diagnostico 
---------- ----------- -----------
dos        Bronquitis  1
dos        Presión     4
tres       Asma        1
tres       Bronquitis  1
uno        Bronquitis  2
uno        Presión     1

Por lo tanto si haces la sumatoria de los diagnósticos es obvio que presión es el diagnóstico más repetido, sin embargo si no se toman los diagnósticos repetidos para cada usuario, tenemos lo siguiente:

Código:
select distinct usuario, diagnostico from @Tabla;

usuario    diagnostico
---------- -----------
dos        Bronquitis
dos        Presión
tres       Asma
tres       Bronquitis
uno        Bronquitis
uno        Presión
Ahora podemos aplicar nuevamente el conteo, utilizando esta subconsulta:

Código:
select diagnostico, count(diagnostico) total from 
(
select distinct usuario, diagnostico from @Tabla
) T
group by diagnostico
order by 2 desc;

diagnostico total
----------- -----------
Bronquitis  3
Presión     2
Asma        1
Aquí se observa que el diagnóstico más repetido es BRONQUITIS, pues aparece para los tres usuarios. PRESIÓN, aunque aparece más veces en la tabla sólo fue diagnosticado para los usuarios uno y dos, pero no para el usuario 3.

Dale un vistazo y nos comentas.

Saludos
Leo.
  #5 (permalink)  
Antiguo 18/01/2012, 13:16
Avatar de robertgustavo  
Fecha de Ingreso: marzo-2008
Ubicación: Camaná - Arequipa
Mensajes: 213
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: eliminar registros repetidos (no pk)

Hola, si funciono como me dijistes, salio de mavavilla, con una consulta simple no lo hubiera logrado, te lo agradesco mucho, podrias explicarme el codigo? es que no manejo muy bien lo de subconsultas. Gracias
El codigo, para quienes lo necesiten quedó asi:

Código PHP:
select diagnosticoidcount(diagnosticoidtotal from 
(
select distinct clienteiddiagnosticoid from historiaclinica
where year
(fecha)=2011
T

group by diagnosticoid
order by 1 desc

__________________
Soluciones basadas en .NET Framework y SQL Server
  #6 (permalink)  
Antiguo 18/01/2012, 16:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: eliminar registros repetidos (no pk)

Hola de nuevo robertgustavo:

Me da gusto que la consulta te haya servido. En cuanto a la explicación, bueno, lo único que habría que explicar sería la subconsulta, al poner la cláusula DISTINCT estás especificando que no entregue registros duplicados: observa este ejemplo:

Código:
select usuario, diagnostico from @Tabla;

usuario    diagnostico
---------- -----------
uno        Bronquitis
uno        Presión
dos        Presión
dos        Presión
dos        Presion

select distinct usuario, diagnostico from @Tabla;

usuario    diagnostico
---------- -----------
dos        Presion
dos        Presión
uno        Bronquitis
uno        Presión
Observa que en el primer caso, sin la cláusula DISTINCT el registro dos-Presión aparece duplicado, por lo tanto la consulta regresa 5 registros. La segunda consulta elimina ese duplicado y por lo tanto presenta sólo 4 registros. Es importante notar que los registros tiene que ser IDENTICOS, es decir que tienen que ser iguales en todos los campos que se listen. Observa el último registro, la palabra Presion aparece sin acento, por lo tanto

Presión NO ES LO MISMO que Presión.

La subconsulta externa es sólo para contar los registros que se repiten, previa eliminación de los duplicados.

Saludos.
Leo.
  #7 (permalink)  
Antiguo 20/01/2012, 20:34
Avatar de robertgustavo  
Fecha de Ingreso: marzo-2008
Ubicación: Camaná - Arequipa
Mensajes: 213
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: eliminar registros repetidos (no pk)

Nuevamente, gracias! Leonardo. me pondre a leer mas sobre subconsultas.Saludos
__________________
Soluciones basadas en .NET Framework y SQL Server

Etiquetas: agrupar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:44.