1

クエリの結果をファイルにアンロードしています。結果レコードを 1 行で表示する必要があります。例えば、

unload to file.unl select col from table where col = "test";

結果の file.unl は次のようになります

test|
test|
....
test|

しかし、私が手に入れたいのは、

test|test|test|....|test|

ガイダンスやアイデアをいただければ幸いです。

ありがとう

4

2 に答える 2

2

DELIMITER "|"SQLまたはDBDELIMITER環境変数を介して宣言できることをおそらくご存知でしょう。私の知る限り、デフォルトのレコードターミネータを他のものに変更する方法はありませNEWLINEん。

したがって、結果を反復処理して変数に追加し、ファイルに書き出すカスタム関数を作成するかRUN、データを行からにピボットする別のスクリプトを作成する必要があると思います。列、例:

UNLOAD TO file.unl SELECT col FROM table WHERE ...;    
RUN "/usr/bin/perl -ni -e 'chomp; print' file.unl";

私はあなたがUnixで実行していて、perlが便利だと仮定しました。そうでない場合、特にこのコードが実行されるマシンの制御が制限されている場合は、Windowsにperlをインストールすることをいじくり回すよりも、イテレーターの提案の方が実用的であることがわかります。

アップデート

私の4GLは非常に錆びていますが、非常に基本的なものを記述していました。例:

DEFINE command CHAR(10100)
DEFINE long_string CHAR(10000)
DECLARE curs1 CURSOR FOR
  SELECT col FROM table WHERE ...

FOREACH curs1 INTO col1
    LET long_string = long_string CLIPPED || col1 CLIPPED || '|'
END FOREACH
LET command = "echo '" || long_string CLIPPED || "' > file.unl"
RUN command

4GLを書いてから15年以上経ちますので、せいぜい擬似コードとして扱ってください。ファイルに直接書き込むより良い方法があるかもしれません、私は正直に思い出せません。

于 2012-07-07T07:11:50.027 に答える
1

CREATE Table #Table(PKey INT主キー、フィールドVARCHAR(10))

INSERT INTO #Table select 1、'ABS1' UNION ALL select 2、'ABS2' UNION ALL select 3、'ABS3'

DECLARE @results VARCHAR(MAX)=''

#Tableから@results=COALESCE(@results +'|' + Field、@results)を選択します

@resultsを選択

于 2012-07-06T10:21:12.537 に答える