在一个表中,我有5列day1,day2 ... day5。表中的记录可以将所有日期设置为TRUE,也可以将几天设置为TRUE。 PGSQL中有什么方法可以只选择记录中布尔值为TRUE的那些列?
示例: 我的表是:课程,列为课程名称,第1天,第2天,第3天,第4天,第5天,记录设置为
English,True,False,True,False,True
German,False,False,True,True,True
French,False,True,False,True,True
我需要显示为结果集的是:
English,Mon,Wed,Fri
German,Wed,Thu,Fri
French,Tue,Thu,Fri
答案 0 :(得分:1)
我相信类似以下内容的工作应该可以完成。这有点丑陋,因为您的架构不是最出色的。这应该适用于Postgres 9 +
SELECT course, string_agg(day, ',') as days_of_week
FROM
(
SELECT course, 'Mon' as day FROM yourtable WHERE day1 = 'True'
UNION ALL
SELECT course, 'Tue' as day FROM yourtable WHERE day2 = 'True'
UNION ALL
SELECT course, 'Wed' as day FROM yourtable WHERE day3 = 'True'
UNION ALL
SELECT course, 'Thu' as day FROM yourtable WHERE day4 = 'True'
UNION ALL
SELECT course, 'Fri' as day FROM yourtable WHERE day5 = 'True'
) sub
答案 1 :(得分:0)
iif
之类的功能突然丢失了,但是您可以简单地创建它:
var output core.ApiData
然后:
create or replace function iif(boolean, anyelement, anyelement = null) returns anyelement
language sql
immutable
as $$
select case when $1 is null then null when $1 then $2 else $3 end
$$;