1

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

ありがとう!

4

1 に答える 1