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... として返す場合、フィールドが存在しない場合にクエリがエラーを返さないようにすることが考えられます。
私が言ったように、これは機能していないため、新しい機能またはアプローチが必要です...