1

我有一列(chgkey)有 17 行记录。如何在同一行中打印前 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 回答