PostgreSQL案例多列给出错误列不存在

时间:2018-03-20 12:58:46

标签: sql postgresql

是否可以在postgresql中运行带有两个不同列的case语句?

我想使用CASE语句将整数映射到特定值。我可以使用ds.ordinal执行此操作,但是当我添加dcs.status时,我收到以下错误:column "follow_up" does not exist

是否可以在一个SELECT语句中的不同列上使用多个case语句?

如何让case when dcs.status = 0 then "follow_up" end as "follow_up"不返回错误?

SELECT DISTINCT ON (pd.id)
           case when ds.ordinal = 1 then s.name end as "primary_specialty",
           case when ds.ordinal = 2 then s.name end as "secondary_specialty",
           case when dcs.status = 0 then "follow_up" end as "follow_up"

    FROM potential_doctors AS pd
         INNER JOIN patient_profile_potential_doctors as pppd on pd.id = pppd.potential_doctor_id
         INNER JOIN doctor_taxonomies AS dt on pd.id = dt.potential_doctor_id
         INNER JOIN taxonomies AS t on dt.taxonomy_id = t.id
         INNER JOIN doctor_profiles AS dp on pd.npi = dp.npi
         INNER JOIN doctor_specialties AS ds on dp.id = ds.doctor_profile_id
         INNER JOIN specialties AS s on ds.specialty_id = s.id
         INNER JOIN doctor_creation_notes as dcs on dcs.doctor_profile_id = dp.id

    WHERE dp.approved IS FALSE

1 个答案:

答案 0 :(得分:4)

我希望查询看起来像这样;

SELECT DISTINCT ON (pd.id)
       (case when ds.ordinal = 1 then s.name end) as primary_specialty,
       (case when ds.ordinal = 2 then s.name end) as secondary_specialty,
       (case when dcs.status = 0 then 'follow_up' end) as follow_up
FROM . . . 
WHERE dp.approved IS FALSE
ORDER BY pd.id;

换句话说,我认为你只需要在字符串常量周围使用单引号。

我做了两个其他的改变。如果您使用的是DISTINCT ON,那么您应该ORDER BYDISTINCT ON的括号中的表达式作为ORDER BY中的第一个键。您可以添加更多密钥以获取您最想要的最早,最新,最大,最小或任何行。

另外,我从列名中删除了双引号。您显然对SQL中的引号感到困惑。我的建议是仅对字符串和日期常量使用单引号。不要使用双引号,并通过仅使用有效字符提供标识符来避免它们。