我是pl / SQL的新手,想就此代码段是否可以以更通用的方式编写获得一些建议。 一般来说,我的意思是说我可能会获得新的“源数据”,其中的模式可能会有所不同。例如,当前可用的是: 其他“源数据”中的name_1,name_2,lakename_1可能以不同的名称提供,并且列号也可能不同。 理想的情况是将在代码的一部分中定义列的名称。这可能是pl / SQL起作用的地方。 预先感谢您的协助。
SELECT
nid,
name_1,
name_2,
lakename_1,
lakename_2,
rivname_1,
rivname_2,
concat_ws(',', "name_1", "name_2", "lakename_1", "lakename_2", "rivname_1", "rivname_2" ) concated_names,
---number of names
(
(CASE WHEN name_1 != '' THEN '1' ELSE '0' END)::integer +
(CASE WHEN name_2 != '' THEN '1' ELSE '0' END)::integer +
(CASE WHEN lakename_1 != '' THEN '1' ELSE '0' END)::integer +
(CASE WHEN lakename_2 != '' THEN '1' ELSE '0' END)::integer +
(CASE WHEN rivname_1 != '' THEN '1' ELSE '0' END)::integer +
(CASE WHEN rivname_2 != '' THEN '1' ELSE '0' END)::integer
) number_of_names,
---unique combinations of names occurence
(
(CASE WHEN name_1 != '' THEN 'name1' ELSE '' END) || ',' ||
(CASE WHEN name_2 != '' THEN 'name2' ELSE '' END) || ',' ||
(CASE WHEN lakename_1 != '' THEN 'lakename_1' ELSE '' END) || ',' ||
(CASE WHEN lakename_2 != '' THEN 'lakename_2' ELSE '' END) || ',' ||
(CASE WHEN rivname_1 != '' THEN 'rivname_1' ELSE '' END) || ',' ||
(CASE WHEN rivname_2 != '' THEN 'rivname_2' ELSE '' END)
) unique_names
,
geom
INTO canada_merged.number_of_names_per_features
FROM
canada_merged.waterbody_and_waterlines
where name_1 !=''
or name_2 !=''
or lakename_1 !=''
or lakename_2 !=''
or rivname_1 !=''
or rivname_2 !='';