Skip to content

Instantly share code, notes, and snippets.

@wyanez
Created August 9, 2012 04:04
Show Gist options
  • Save wyanez/3300850 to your computer and use it in GitHub Desktop.
Save wyanez/3300850 to your computer and use it in GitHub Desktop.
SELECT donde se ilustra un JOIN Condicional y el uso de COALESCE en Postgres
-- Luego mis busquedas por numero de documento seran como esto:
SELECT * FROM sas.viw_auditoria_num
WHERE numero_doc='26'
-- Descripción
-- Tengo una Tabla de Auditoria (auditoria_sas) con los siguientes Campos:
-- id,fecha,hora,usuario,tabla,operacion,registro_id
-- registro_id es el id del registro correspondiente en la tabla dada por el campo tabla
-- y necesito el numero de cada documento que está en cada tabla para una búsqueda por numero de documento
-- Necesito hacer un join condicional, mi solución fue: (Gracias al Left JOIN y a la función COALESCE en Postgres!)
CREATE OR REPLACE VIEW sas.viw_auditoria_num AS
SELECT a.*,
COALESCE(o.numero,to_char(e.id,'FM99999'),to_char(s.id,'FM99999'),f.numero,to_char(fu.id,'FM99999'),to_char(p.id,'FM99999'),'N/A') as numero_doc
FROM sas.auditoria_sas a
LEFT OUTER JOIN sas.ordenes_servicio o ON (a.registro_id=o.id and tabla='ordenes_servicio')
LEFT OUTER JOIN sas.emergencias e ON (a.registro_id=e.id and tabla='emergencias')
LEFT OUTER JOIN sas.solicitudes s ON (a.registro_id=s.id and tabla='solicitudes')
LEFT OUTER JOIN sas.facturas f ON (a.registro_id=f.id and tabla='facturas')
LEFT OUTER JOIN sas.funerarias fu ON (a.registro_id=fu.id and tabla='funerarias')
LEFT OUTER JOIN sas.polizas p ON (a.registro_id=p.id and tabla='polizas')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment