Re: recusive ejemplo real

From: "Miguel Beltran R(dot)" <yourpadre(at)gmail(dot)com>
To: Carlos Beltran Villamizar <cbeltranv(at)cable(dot)net(dot)co>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: recusive ejemplo real
Date: 2011-01-27 14:57:07
Message-ID: AANLkTi=SQL5MLhV-Wf8zDy8T_rADa8_oQGQtHOqFYKx+@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gracias

El 25 de enero de 2011 20:42, Carlos Beltran Villamizar <
cbeltranv(at)cable(dot)net(dot)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(at)postgresql(dot)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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message killspam killspam 2011-01-27 17:18:51 Reagrupar datos de una tabla segun condiciones
Previous Message Edwin Quijada 2011-01-27 14:49:11 RE: CREAR RESPALDO AUTOMATICO CON CRONTAB