データまたはデータが欠落している場合のエラー ケースを示すコードを含むメイン データ テーブルがあります。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条件が満たされた場合にのみ、その結合を行うように指示する方法はありますか?
ありがとう!