0

SQL に変換する必要がある SAS のコードに問題があります。通常、私はこれが非常に得意ですが、そうではありません。新しい課題に直面しており、これまでのところ、それを解決するための私のアイデアはすべて失敗しており、そうする正しい方法を見つけていません.

フィールドの名前に特定のパターンがある場合、それらのフィールドを合計する必要があるように、このリクエストに対してフィールドを動的に取得できる必要があります。

私のPostgreSQLのバージョンは8.0.2、PADB 5.3.3.1 78560です

したがって、テーブルには のようなフィールドがある場合とない場合がありますbas_txn_03cibc_vcl

' ' as bas_txn_03cibc_vclフィールドが information_schema テーブルに見つからない場合に出力し、見つかった場合に使用する関数を作成しbas_txn_03cibc_vclました。

しかし、コマンドを実行すると、UDF は PADB テーブルでは使用できないというエラーが表示されます。

「エラー: XX000: ユーザー定義の SQL 言語関数 "check_if_field_exists(文字の変化、文字の変化、文字の変化)" は、PADB テーブルを参照するクエリでは使用できません。」

現在、ストアド プロシージャを使用して新しいアプローチを構築していますが、ユース ケースが制限されます。フィールドを動的に選択する方法に関する他のアイデアはありますか?

関数:

CREATE OR REPLACE FUNCTION check_if_field_exists(_schm text, _tbl text, _field text)
RETURNS text AS
$BODY$
DECLARE 
    _output_ text:=  '' as _field;
BEGIN 
EXECUTE   'SELECT column_name into : _output_ FROM rdwaeprd.information_schema.columns 
where table_schema='''|| _schm||'''   
and table_name='''|| _tbl||'''   
and column_name='''|| _field||'''   
order by table_name,column_name;';  
RETURN _output_;
END
$BODY$
LANGUAGE PLPGSQL;

そして、私はそれをこのように使用します

select indiv_id,ae_psamson.check_if_field_exists('ae_psamson','activ_cc', 'tot_txn_03AMX_AMXE') ,tot_txn_03AMX_AMXD
from activ_cc
group by indiv_id,tot_txn_03AMX_AMXD;

関数が '' を tot_txn_03AMX_AMXE として返すか、単に tot_txn_03AMX_AMXE... として返す場合、フィールドが存在しない場合にクエリがエラーを返さないようにすることが考えられます。

私が言ったように、これは機能していないため、新しい機能またはアプローチが必要です...

4

1 に答える 1