表的浮动模式定义-如何在pl / sql中

时间:2018-12-03 09:49:10

标签: postgresql

我是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 !='';

0 个答案:

没有答案