我有一个主数据表,其中包含数据或在数据丢失时表示错误情况的代码。我需要:1)如果数据有效或 2)如果数据无效(这是错误代码),则显示该错误代码的人类可读版本
错误代码的人类可读形式来自另一个表,我正在加入该表以翻译代码。
以下是主表中的一些示例数据:
Table pub_k12.schools
school_name | title1 | school_wide_title1 | total_students
-------------+--------+--------------------+---------------
School-A | M | M | 2300
School-B | N | N | -2
School-C | M | N | -1
代码翻译表如下所示:
Table pub_k12.ref_school_field_data
data_code | data_string
----------+-------------
-1 | No Data
-2 | N/A
-9 | Bad Data
M | No Data
N | N/A
不幸的是,这种数据格式无法更改。这是给我的。
这是我正在使用的查询:
SELECT s.school_name, stype.type_string, d1.data_string AS title1, d2.data_string AS school_title1,
CASE
WHEN s.total_students::int < 0 THEN d3.data_string
ELSE s.total_students
END "total_students"
FROM pub_k12.schools AS s
JOIN pub_k12.ref_school_type AS stype ON s.school_type = stype.type_code
JOIN pub_k12.ref_school_field_data AS d1 ON s.title1 = d1.data_code
JOIN pub_k12.ref_school_field_data AS d2 ON s.school_wide_title1 = d2.data_code
JOIN pub_k12.ref_school_field_data AS d3 ON s.total_students = d3.data_code;
(暂时忽略 stype - 这是类似的将代码转换为可读的情况)
所以我正在检查 total_students 是否 >0,在这种情况下我会直接显示它。否则,我会执行 JOIN 来翻译代码。这是我运行查询时得到的结果(为清楚起见,我省略了 type_string 字段):
school_name | title1 | school_title1 | total_students
-------------+---------+---------------+---------------
School-B | N/A | N/A | N/A
School-C | No Data | N/A | No Data
如您所见,没有返回具有有效“total_students”数据的 School-A。只要 total_students 是错误代码,查询就可以工作,但如果它是有效数据(例如 School-A),则 d3 上的最后一个 JOIN 不起作用,因为该数字(在本例中为 2300)不匹配错误代码表中的任何值。
有没有办法告诉它只有在满足 CASE-WHEN 条件时才加入?
谢谢!