我有一个包含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
答案 0 :(得分:1)
答案 1 :(得分: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