Consulta SQL algo compleja

From: Lynkx <lynkx(at)surnet(dot)cl>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Consulta SQL algo compleja
Date: 2004-12-13 19:01:24
Message-ID: 41BDE704.2050909@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola comunidad postgres.

Tengo el siguiente problema:

Poseo las sgtes tablas (simplificado para solo mostrar el problema
en si):

facturas
- num_fact (PK)
- cod_sucursal (FK con sucursales)
- valor

notas_credito
- num_nc (PK)
- cod_sucursal (FK con sucursales)
- num_fact (FK con facturas)
- valor

sucursales
- cod_sucursal (PK)
- nombre

Y deseo mostrar, para cada sucursal, la suma de facturas.valor menos la
suma de notas_credito.valor.
Contar que una factura puede tener cero o mas notas_credito (se que hay
una redundancia al tener cod_sucursal tambien en notas_credito, pero
bueno asi venia el modelo)

Ingreso los sgtes datos:
sucursales:
1, 'matriz'
2, 'sede'

facturas:
1, 1, 100
2, 2, 200
3, 1, 50

notas_credito:
1, 1, 1, 25

Y se me ocurrio ejecutar lo siguiente para resolver mi problema:

SELECT DISTINCT
s.cod_sucursal, s.nombre,
(SUM(f.valor) - SUM(n.valor)) AS sum_valor

FROM facturas f LEFT JOIN notas_credito n ON (f.num_fact = n.num_fact
AND f.cod_sucursal = n.cod_sucursal), sucursales s

WHERE f.cod_sucursal = s.cod_sucursal

GROUP BY
s.cod_sucursal, s.nombre

Y devuelve lo sgte:
1 matriz 125
2 sede (no hay valor)

El primer registro esta correcto, pero el segundo no. Debería devolver
un 200. Se que algo tiene que ver el LEFT JOIN que estoy ejecutando. No
logro visualizar la consulta para que devuelva:
1 matriz 125
2 sede 200

Cualquier ayuda es bienvenida.

Saludos.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Martín Marqués 2004-12-13 19:15:14 Re: Acentos en postgres
Previous Message Carlos Jordán 2004-12-13 17:51:29 Re: Acentos en postgres