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
Post a Comment