複数のテーブル(名前がわずかに異なる)があり、列名が同じで、他のいくつかの一意のテーブルに結合しています。次に、Caseを使用してこれらのテーブルからデータを選択し、null値を省略します。
例CASE WHEN x IS NULL THEN y ELSE x
など。
ただし、含める必要のあるケース関数の数が多いため、クエリが遅くなるのではないかと心配しています。フォームに変更があるたびに、このフォームテーブルの新しいコピーが作成されます。履歴レポートでは、各コピーをクエリして、列の「グループ」ごとに関連データを1つの列に取得する必要があります。また、すべてのテーブルの名前(およびID)を格納するテーブルがあり、ワイルドカードを使用してこのテーブルをクエリし、すべての履歴テーブルを自動的にクエリできるかどうか疑問に思っていました。すべての列ヘッダーが同じであるため、次のようなサブクエリを使用したいと考えていました。
SELECT x, y, x FROM (
SELECT form_name FROM table_of_table_names
WHERE form_name LIKE '%mytypeofform%'
そして、通常どおりこのデータを結合できますが、明らかに上記は機能しません。これにより、変更が発生するたびにクエリを編集する必要がなくなります。私が達成しようとしていることは、完全な外部結合と複数のケース関数よりも速くない可能性がありますが、ケース関数を追加するたびに、レポートの実行速度が大幅に低下するように見えます。動的SQLを使用する必要があると通知されましたが、これに関する経験はほとんどありません。ありがとう!
追加情報:
SELECT DISTINCT
FLODS_CASE_ENQUIRY_F00.CASE_ENQUIRY_ID AS 'Case ID', FLODS_CLASSIFICATION_D00.TYPE AS 'Type',
CASE WHEN FLODS_101000385_SPECIAL_UP_C00.PAYMENTSTATUS IS NULL THEN (CASE WHEN FLODS_101000386_SPECIAL_UP_C00.PAYMENTSTATUS IS NULL
THEN (CASE WHEN FLODS_101000488_SPECIAL_UP_C00.PAYMENTSTATUS IS NULL
THEN (CASE WHEN FLODS_101000489_SPECIAL_UP_C00.PAYMENTSTATUS IS NULL
THEN (CASE WHEN FLODS_101000508_SPECIAL_UP_C00.PAYMENTSTATUS IS NULL
THEN (CASE WHEN FLODS_101000509_SPECIAL_UP_C00.PAYMENTSTATUS IS NULL
THEN (CASE WHEN FLODS_101000511_SPECIAL_UP_C00.PAYMENTSTATUS IS NULL
THEN (CASE WHEN FLODS_101000512_SPECIAL_UP_C00.PAYMENTSTATUS IS NULL
THEN 'No Payment Status' ELSE FLODS_101000512_SPECIAL_UP_C00.PAYMENTSTATUS END) ELSE FLODS_101000511_SPECIAL_UP_C00.PAYMENTSTATUS END)
ELSE FLODS_101000509_SPECIAL_UP_C00.PAYMENTSTATUS END) ELSE FLODS_101000508_SPECIAL_UP_C00.PAYMENTSTATUS END)
ELSE FLODS_101000489_SPECIAL_UP_C00.PAYMENTSTATUS END) ELSE FLODS_101000488_SPECIAL_UP_C00.PAYMENTSTATUS END)
ELSE FLODS_101000386_SPECIAL_UP_C00.PAYMENTSTATUS END) ELSE FLODS_101000385_SPECIAL_UP_C00.PAYMENTSTATUS END AS 'Payment Status',
<more columns inc. a couple more columns using similar case functions>
FROM FLODS_101000489_SPECIAL_UP_C00 FULL OUTER JOIN
FLODS_101000488_SPECIAL_UP_C00 FULL OUTER JOIN
FLODS_101000509_SPECIAL_UP_C00 FULL OUTER JOIN
FLODS_101000511_SPECIAL_UP_C00 full outer JOIN
FLODS_CASE_ENQUIRY_F00 ON FLODS_101000511_SPECIAL_UP_C00.CASE_ENQUIRY_ID = FLODS_CASE_ENQUIRY_F00.CASE_ENQUIRY_ID full outer JOIN
FLODS_101000512_SPECIAL_UP_C00 ON
FLODS_CASE_ENQUIRY_F00.CASE_ENQUIRY_ID = FLODS_101000512_SPECIAL_UP_C00.CASE_ENQUIRY_ID FULL OUTER JOIN
などなど
役立つ場合は、INFORMATION_SCHEMA.COLUMNSからテーブル名と列名を選択できます。私はこれらのテーブルを維持していません。乾杯!