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

Responder a