我有多个表(名称略有不同),列名相同,我加入了许多其他唯一表。然后我使用 Case 从这些表中选择数据以省略空值:
例如CASE WHEN x IS NULL THEN y ELSE x
等等等等。
但是我担心我的查询速度很慢,因为我必须包含大量的案例功能。每次我们的表单发生变化时,都会生成该表单表的新副本,对于历史报告,我必须查询每个副本以将相关数据获取到每个“组”列的单个列中。我还有一个存储所有表的名称(和 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 中选择表名和列名。我不维护这些表。干杯!