From: | Sergio Daniel Gomez <sergiogomez(at)tostado(dot)com(dot)ar> |
---|---|
To: | Sergio Valdes Hurtado <svh(dot)pgsql(at)gmail(dot)com> |
Cc: | Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Suma de Campos |
Date: | 2010-04-15 23:26:30 |
Message-ID: | 4BC7A0A6.1010808@tostado.com.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Sergio Daniel Gomez escribió:
> Sergio Valdes Hurtado escribió:
>> Estimados,
>> Tengo una tabla con la siguiente estructura:
>>
>> RBD int -- Es un identificador de
>> establecimientos educacionales
>> ano_pago int -- Año de pago
>> mes_pago int -- Mes de pago
>> monto int -- Monto pagado
>> tip_proc vachar(1) -- Identificador de Tipo de
>> Proceso y puede tener el valor "N" o "S"
>>
>> En el caso de que el Tipo de Proceso sea "S", sólo los meses de Marzo
>> a Diciembre tienen este tipo de pago, es decir no hay pagos "S" en los
>> meses de Enero y Febrero.
>>
>> Pues bien, me piden un informe que sume los pagos por año por tipo de
>> Proceso ("N" o "S") y para ello hice la siguiente consulta:
>>
>> SELECT rbd, sum(monto) FROM dbo.orden_pago
>> where ano_pago =2009
>> and tip_proc = "S"
>> group by rbd
>>
>> El problema es que ahora me dicen que para este total debo incluir los
>> meses de Enero y Febrero que tienen tipo de Pago "N" y sumarlo con lo
>> que se obtiene en la consulta anterior.
>>
>> Mi pregunta es si se podrá hacer en una sola consulta?, ya que este es
>> una base de datos heredada y sólo tenemos accesos de lectura y no
>> podemos hacer funciones ni tablas temporales
>>
>> Saludos cordiales a todos
>> --
>> TIP 2: puedes desuscribirte de todas las listas simultáneamente
>> (envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
>>
> Podría ser ?
>
> SELECT rbd, sum(monto) FROM dbo.orden_pago
> where ano_pago =2009
> and (tip_proc = "S"
> or (tip_proc = "N"
> and (mes_pago = "Enero"
> or mes_pago = "Febrero")
> )
> group by rbd
>
> --
> TIP 8: explain analyze es tu amigo
>
Ups! mes_pago es int, entonces
SELECT rbd, sum(monto) FROM dbo.orden_pago
where ano_pago =2009
and (tip_proc = "S"
or (tip_proc = "N"
and (mes_pago between 1 and 2)
)
group by rbd;
suponiendo que enero = 1, febrero = 2, etc.
From | Date | Subject | |
---|---|---|---|
Next Message | Eduardo Lopez | 2010-04-16 01:16:57 | Re: Exponer procedimientos almacenados como web services |
Previous Message | mvillagomez | 2010-04-15 23:19:39 | Re: Suma de Campos |