Обсуждение: please help with converting a view in oracle into postgresql readably code

Поиск
Список
Период
Сортировка

please help with converting a view in oracle into postgresql readably code

От
"Matthew Geddert"
Дата:
Hello,

I am trying to convert an application to postgresql, and am having a
bear of a time converting the following view (from oracle). What it
does, just in case you aren't very familiar with oracle syntax, is group
the average reg_state from the events_registrations table after having
converted the varchar variables present in reg_state, into numbers to
represent the various possibilities). Then, once it has found the
average number for all items in the table events_registrations with the
same order_id number it fills in a human readable word.

Thanks for any help in letting me either know how to create this view,
or to tell me how to convert the variables in the varchar field
reg_state into the numbers I want them to represent which I will be able
to manipulate with things such as floor() and avg().

Matthew Geddert
=====

create or replace view events_orders_states 
as
select  o.*,
o_states.order_state
from events_orders o,(selectorder_id,decode (floor(avg (decode (reg_state,                   'canceled', 0,
    'waiting', 1,                  'pending', 2,                  'shipped', 3,                  0))),            0,
'canceled',           1, 'incomplete',            2, 'incomplete',            3, 'fulfilled',            'void') as
order_statefromevents_registrationsgroup by order_id) o_states
 
where o_states.order_id = o.order_id;



Re: please help with converting a view in oracle into postgresql readably code

От
Tom Lane
Дата:
"Matthew Geddert" <geddert@yahoo.com> writes:
> create or replace view events_orders_states 
> as
> select  o.*,
> o_states.order_state
> from events_orders o,
>  (select
>  order_id,
>  decode (floor(avg (decode (reg_state, 
>                    'canceled', 0,
>                    'waiting', 1,
>                    'pending', 2,
>                    'shipped', 3,
>                    0))),
>              0, 'canceled',
>              1, 'incomplete',
>              2, 'incomplete',
>              3, 'fulfilled',
>              'void') as order_state
>  from events_registrations
>  group by order_id) o_states
> where o_states.order_id = o.order_id;

DECODE() is an Oracle-ism.  You can use the SQL-standard CASE construct
instead.  See

http://www.ca.postgresql.org/users-lounge/docs/7.2/postgres/functions-conditional.html

Other than the DECODE() calls this should run fine in PG.
        regards, tom lane