sql - Multiple select case in a select query -


i'm beginning in postgres , have issue regarding multiple select case in select query.

bd_david=> select * edt_sem;  code_module |  groupe  | week | day  | hour   | room  -------------+----------+------+-----+--------+-------  m3106       | infofcas |   1  |    1 |      1 | o104  m3105       | infofcas |   1  |    1 |      5 | o104  m3106       | infofcas |   2  |    1 |      1 | o104 (3 rows) 

what want create function show rows of week , using function :

create or replace function show_edt(in paramsem numeric)     returns table(module varchar, groupe varchar, week numeric, day text, hour text, room varchar) $$ begin     return query           select e.code_module,                  e.groupe,                  e.sem,                  (select case                 when e.jour = 1 'monday'                 when e.jour = 2 'tuesday'                 when e.jour = 3 'wednesday'                 when e.jour = 4 'thursday'                 when e.jour = 5 'friday'                 end "jour"                 edt_sem edt_sem.sem = paramsem [ limit 1... ? don't know ] ),                 (select case                 when heured = 1 '9h'                 when heured = 2 '10h'                 when heured = 3 '11h'                 when heured = 4 '12h'                 when heured = 5 '14h'                 when heured = 6 '15h'                 when heured = 7 '16h'                 when heured = 8 '17h'                 end "heure"                 edt_sem edt_sem.sem = paramsem [ limit 2 ?? don't know.. ]),                 e.salle                 edt_sem e e.sem = paramsem;  end; $$ language plpgsql; 

it works 1 row :

select * afficher_edt(2);  module |  groupe  | week    | day   | hour  | room  --------+----------+---------+-------+-------+-------  m3106  | infofcas |       2 | monday| 9h    | o104 (1 row) 

but have issue more 1 row :

bd_david=> select * afficher_edt(1);  module |  groupe  | week    | day   | hour  | room  --------+----------+---------+-------+-------+-------  m3106  | infofcas |       1 | lundi | 9h    | o104  m3105  | infofcas |       1 | lundi | 9h /!\| o104 

/!\ should have been displayed 14h instead of 9h

edit : error message :

bd_david=> select * show_edt(1); error:  more 1 row returned subquery used expression context:  pl/pgsql function afficher_edt(numeric) line 3 @ return query 

well more or less why got error : it's because there 2 rows fetched select case different hours don't know how rid of it.. :/

create or replace function show_edt(in paramsem numeric) returns table (     module varchar, groupe varchar, week numeric,      day text, hour text, room varchar ) $$ begin     return query          select             e.code_module,              e.groupe,              e.sem,              case e.jour                 when 1 'monday'                 when 2 'tuesday'                 when 3 'wednesday'                 when 4 'thursday'                 when 5 'friday'             end "jour",             case heured                 when 1 '9h'                 when 2 '10h'                 when 3 '11h'                 when 4 '12h'                 when 5 '14h'                 when 6 '15h'                 when 7 '16h'                 when 8 '17h'             end "heure"             e.salle         edt_sem e         e.sem = paramsem; end; $$ language plpgsql; 

you don't need plpgsql this. sql

create or replace function show_edt(in paramsem numeric) returns table (     module varchar, groupe varchar, week numeric,      day text, hour text, room varchar ) $$     select         e.code_module,          e.groupe,          e.sem,          case e.jour             when 1 'monday'             when 2 'tuesday'             when 3 'wednesday'             when 4 'thursday'             when 5 'friday'         end "jour",         case heured             when 1 '9h'             when 2 '10h'             when 3 '11h'             when 4 '12h'             when 5 '14h'             when 6 '15h'             when 7 '16h'             when 8 '17h'         end "heure"         e.salle     edt_sem e     e.sem = paramsem; $$ language sql; 

Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -