1

17 行のレコードを含む列 (chgkey) があります。最初の 3 つのレコードを同じ行に出力するにはどうすればよいですか (raw1、raw2、raw3 など)。これで raw1 を問題なく印刷できます。どんな助けでも大歓迎です。以下は私のコードです。

    let rpt.chgkey =  null
      select * into z_charge.* from charge where charnum in
          (select shtwrd_no from crbookid where
               crbookid.book_no = rpt.book_no and crbookid.line_no = rpt.line_no )

    let scratch = z_charge.chgkey
    let rpt.chgkey = scratch
         call make_charge_section(scratch) returning rpt.chgkey
    print
        column   1, ESC, "(s0p12h0s3b4099T", ESC, "&a0.5R"
    print
    print  ESC,"&a15.1R", ESC,"&a15C", rpt.chgkey
4

2 に答える 2

1

print ステートメントの最後にセミコロンを使用して、行末文字を抑制します。

ただし、PRINT ステートメントをセミコロンで終了すると、行末の暗黙の LINEFEED 文字が抑制されます。

印刷する

于 2012-08-31T16:47:23.467 に答える
0

SELECT ステートメント (現在は INTO 句を使用) が複数の行を返す場合、FOREACH ループでラップしない限り、実行時エラーが発生します。

REPORT 関数内に FOREACH ループがある場合は、かなり簡単に処理できます。データが個別の OUTPUT TO REPORT ステートメントを介して提供される場合、それはより困難です。

人生は簡単だと仮定すると、次のようになります。

DECLARE c CURSOR FOR
    SELECT * INTO z_charge.*
      FROM charge
     WHERE charnum IN
           (SELECT shtwrd_no FROM crbookid
            WHERE crbookid.book_no = rpt.book_no AND crbookid.line_no = rpt.line_no
           )

LET i = 0
FOREACH c
    PRINT COLUMN (i * 20 + 1), z_charge.raw;
    LET i = i + 1
    IF i MOD 3 = 0 THEN PRINT END IF
END FOREACH
IF i MOD 3 != 0 THEN PRINT END IF

ループz_charge.rawは適切な列に値を出力します (そのような列番号で計算を行うことができます)。もちろん、これは生データが 20 文字以内に収まることを前提としています。


DECLARE c CURSOR FOR
    SQL
    SELECT FIRST 3 * INTO z_charge.*
      FROM charge
     WHERE charnum IN
           (SELECT shtwrd_no FROM crbookid
            WHERE crbookid.book_no = rpt.book_no AND crbookid.line_no = rpt.line_no
           )
    END SQL
于 2012-08-31T17:20:46.603 に答える