Gracias El 25 de enero de 2011 20:42, Carlos Beltran Villamizar < cbeltr...@cable.net.co> escribió:
> Diseños recursivos, como los de este ejemplo, son muy útiles en > proyectos con temas organizacionales o contables. Sin embargo su manejo > es de cuidado. Afortunadamente con <recursive> se pueden preparar muchos > informes con su estructura jerárquica así: > > ---- > CREATE TABLE lineanegocio > ( > id serial, > PRIMARY KEY (id), > nombre character varying (100) NOT NULL, > orden integer NOT NULL, > lineanegocio_id int, > FOREIGN KEY (lineanegocio_id) REFERENCES lineanegocio(id), > activ boolean DEFAULT true > ); > > --1 > INSERT INTO lineanegocio (nombre, orden) VALUES ('FINCAS', 1); > --2 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES > ('AGRICOLA',1, 1); > --3 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES > ('PECUARIA',2, 1); > --4 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES > ('MANGOS', 1, 2); > --5 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES > ('CITRICOS', 2, 2); > --6 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES ('AVES > DE CORRAL',1, 3); > --7 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES ('MANGO > TOMMY', 1, 4); > --8 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES ('MANGO > COMUN', 2, 4); > --9 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES > ('NARANJA', 1, 5); > --10 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES > ('LIMON', 2, 5); > --11 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES ('CARNE > POLLO', 1, 6); > --12 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES ('POLLO > VIVO', 2, 6); > --13 > INSERT INTO lineanegocio (nombre, orden, lineanegocio_id) VALUES > ('HUEVOS', 3, 6); > --14 > INSERT INTO lineanegocio (nombre, orden) VALUES ('SUPERMERCADOS', 2); > -- ... > > WITH RECURSIVE lineasnegocio (nivel, id, nombre, lineanegocio_id, > camino) AS ( > SELECT 0, padre.id, padre.nombre, padre.lineanegocio_id, > padre.orden::text || padre.nombre::text > FROM lineanegocio AS padre > WHERE padre.lineanegocio_id IS NULL > UNION ALL > SELECT padre.nivel + 1, hijo.id, hijo.nombre, hijo.lineanegocio_id, > padre.camino || '.' || hijo.orden::text || hijo.nombre > FROM lineasnegocio padre > JOIN lineanegocio AS hijo ON hijo.lineanegocio_id = padre.id > ) > SELECT rpad('', nivel * 2, '_') || nombre AS nombre_unidad_negocio, id > FROM lineasnegocio > ORDER BY camino; > ---- > Compañeros de lista. Espero les sirva. > > Desde Bogotá. Colombia. > Carlos Beltrán Villamizar. > > - > Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org > ) > Para cambiar tu suscripción: > http://www.postgresql.org/mailpref/pgsql-es-ayuda > -- ________________________________________ Lo bueno de vivir un dia mas es saber que nos queda un dia menos de vida