Friday, January 18, 2013

Registros que se repiten query SQL

Caso: cómo obtener las filas o registros de una tabla cuyos valores (valor de una columna) se repiten.

Me topé con el caso de que en mi tabla de contratos, tenía contratos con el mismo número de contrato el cual sólo debería pertenecerle a un registro (no tenía el constraint de que sea único ya que también se guardan las adendas). Necesitaba saber qué contratos se estaban repitiendo más de una vez para hacerle un seguimiento y saber cómo surgió tal caso.

A través del siguiente query sql resultó bastante útil...

SELECT id_contrato FROM boveda.dbo.Cliente_Contrato  
WHERE fecha_adenda is null and habilitado=1 and nro_contrato in
(
SELECT  nro_contrato FROM boveda.dbo.Cliente_Contrato 
WHERE habilitado=1 and fecha_Adenda is null 
GROUP BY nro_contrato
HAVING COUNT(*) > 1
)


En general, será una consulta anidada con un HAVING el cual podés personalizarlo si querés saber de los registros que se repiten más de 1 vez, más de 2, etc. Para un caso singular, debes cambiar el filtro en el WHERE (desde luego que sí)

Fácil, verdad?

HaPPy CoDiNg =)

Thursday, January 10, 2013

SQL: update con alias

La forma correcta de escribir una sentencia UPDATE utilizando un alias es como sigue:

UPDATE c set c.contrato_id=
w.nro_contrato=c.nro_contrato)
(SELECT DISTINC w.id FROM boveda.com.contrato w WHERE w.tipo_registro=1 and w.nro_contrato='2402/04')
FROM boveda.com.contrato c
WHERE c.tipo_registro=3 and c.nro_contrato='2402/04'

Sencillo después de saber el cómo, no? Yo no lo sabía e insistía que era algo como...

UPDATE    nombre_de_la_tabla    y_aqui_el_alias    SET    y_aqui_el_resto