SELECT 在 ON 子句中包含子字符串?
SELECT with substring in ON clause?
我在 ABAP 中有以下 select 语句:
SELECT munic~mandt VREFER BIS AB ZZELECDATE ZZCERTDATE CONSYEAR ZDIMO ZZONE_M ZZONE_T USAGE_M USAGE_T M2MC M2MT M2RET EXEMPTMCMT EXEMPRET CHARGEMCMT
INTO corresponding fields of table GT_INSTMUNIC_F
FROM ZCI00_INSTMUNIC AS MUNIC
INNER JOIN EVER AS EV on
MUNIC~POD = EV~VREFER(9).
"where EV~BSTATUS = '14' or EV~BSTATUS = '32'.
我对上述语句的问题是无法识别 'ON' 子句上的 substring/offset 操作。如果我删除 '(9) 然后
它识别该字段,否则它给出错误:
字段 ev~refer 未知。它既不在指定的 table 之一中
也不由 "DATA" 语句定义。我也尝试在 'Where' 子句中做类似的事情,收到类似的错误:
LOOP AT gt_instmunic.
clear wa_gt_instmunic_f.
wa_gt_instmunic_f-mandt = gt_instmunic-mandt.
wa_gt_instmunic_f-bis = gt_instmunic-bis.
wa_gt_instmunic_f-ab = gt_instmunic-ab.
wa_gt_instmunic_f-zzelecdate = gt_instmunic-zzelecdate.
wa_gt_instmunic_f-ZZCERTDATE = gt_instmunic-ZZCERTDATE.
wa_gt_instmunic_f-CONSYEAR = gt_instmunic-CONSYEAR.
wa_gt_instmunic_f-ZDIMO = gt_instmunic-ZDIMO.
wa_gt_instmunic_f-ZZONE_M = gt_instmunic-ZZONE_M.
wa_gt_instmunic_f-ZZONE_T = gt_instmunic-ZZONE_T.
wa_gt_instmunic_f-USAGE_M = gt_instmunic-USAGE_M.
wa_gt_instmunic_f-USAGE_T = gt_instmunic-USAGE_T.
temp_pod = gt_instmunic-pod.
SELECT vrefer
FROM ever
INTO wa_gt_instmunic_f-vrefer
WHERE ( vrefer(9) LIKE temp_pod ). " PROBLEM WITH SUBSTRING
"AND ( BSTATUS = '14' OR BSTATUS = '32' ).
ENDSELECT.
WRITE: / sy-dbcnt.
WRITE: / 'wa is: ', wa_gt_instmunic_f.
WRITE: / 'wa-ever is: ', wa_gt_instmunic_f-vrefer.
APPEND wa_gt_instmunic_f TO gt_instmunic_f.
WRITE: / wa_gt_instmunic_f-vrefer.
ENDLOOP.
itab_size = lines( gt_instmunic_f ).
WRITE: / 'Internal table populated with', itab_size, ' lines'.
我要实现的基本任务是修改一个table上的特定字段,
从另一个人那里拉取价值。他们有一个共同的领域( pod = vrefer(9) )。提前感谢您的宝贵时间。
They have a common field ( pod = vrefer(9) )
这是一个错误的假设,因为它们都不是字段,而是一个字段。
如果您确实需要通过 SQL、 完成该任务,我建议您检查本地 SQL 句子,例如 SUBSTRING,并检查您是否可以设法在 EXEC_SQL 或(更好)CL_SQL* 类.
中使用它们
field(9)
是ABAP环境处理的子集操作,不能翻译成database-levelSQL语句(至少目前不行,但我'如果它会是,我会感到惊讶)。最好的选择是分别 select 数据集并手动合并它们(如果两者大致相等)或 pre-select 一个并使用 FAE/IN 子句。
如果您使用的是足够晚的 NetWeaver 版本,它可以在 7.51 上运行,您可以使用 OpenSQL 函数 LEFT
或 SUBSTRING
。您的查询类似于:
SELECT munic~mandt VREFER BIS AB ZZELECDATE ZZCERTDATE CONSYEAR ZDIMO ZZONE_M ZZONE_T USAGE_M USAGE_T M2MC M2MT M2RET EXEMPTMCMT EXEMPRET CHARGEMCMT
FROM ZCI00_INSTMUNIC AS MUNIC
INNER JOIN ever AS ev
ON MUNIC~POD EQ LEFT( EV~VREFER, 9 )
INTO corresponding fields of table GT_INSTMUNIC_F.
请注意,INTO
子句也需要移至命令末尾。
我在 ABAP 中有以下 select 语句:
SELECT munic~mandt VREFER BIS AB ZZELECDATE ZZCERTDATE CONSYEAR ZDIMO ZZONE_M ZZONE_T USAGE_M USAGE_T M2MC M2MT M2RET EXEMPTMCMT EXEMPRET CHARGEMCMT
INTO corresponding fields of table GT_INSTMUNIC_F
FROM ZCI00_INSTMUNIC AS MUNIC
INNER JOIN EVER AS EV on
MUNIC~POD = EV~VREFER(9).
"where EV~BSTATUS = '14' or EV~BSTATUS = '32'.
我对上述语句的问题是无法识别 'ON' 子句上的 substring/offset 操作。如果我删除 '(9) 然后 它识别该字段,否则它给出错误:
字段 ev~refer 未知。它既不在指定的 table 之一中 也不由 "DATA" 语句定义。我也尝试在 'Where' 子句中做类似的事情,收到类似的错误:
LOOP AT gt_instmunic.
clear wa_gt_instmunic_f.
wa_gt_instmunic_f-mandt = gt_instmunic-mandt.
wa_gt_instmunic_f-bis = gt_instmunic-bis.
wa_gt_instmunic_f-ab = gt_instmunic-ab.
wa_gt_instmunic_f-zzelecdate = gt_instmunic-zzelecdate.
wa_gt_instmunic_f-ZZCERTDATE = gt_instmunic-ZZCERTDATE.
wa_gt_instmunic_f-CONSYEAR = gt_instmunic-CONSYEAR.
wa_gt_instmunic_f-ZDIMO = gt_instmunic-ZDIMO.
wa_gt_instmunic_f-ZZONE_M = gt_instmunic-ZZONE_M.
wa_gt_instmunic_f-ZZONE_T = gt_instmunic-ZZONE_T.
wa_gt_instmunic_f-USAGE_M = gt_instmunic-USAGE_M.
wa_gt_instmunic_f-USAGE_T = gt_instmunic-USAGE_T.
temp_pod = gt_instmunic-pod.
SELECT vrefer
FROM ever
INTO wa_gt_instmunic_f-vrefer
WHERE ( vrefer(9) LIKE temp_pod ). " PROBLEM WITH SUBSTRING
"AND ( BSTATUS = '14' OR BSTATUS = '32' ).
ENDSELECT.
WRITE: / sy-dbcnt.
WRITE: / 'wa is: ', wa_gt_instmunic_f.
WRITE: / 'wa-ever is: ', wa_gt_instmunic_f-vrefer.
APPEND wa_gt_instmunic_f TO gt_instmunic_f.
WRITE: / wa_gt_instmunic_f-vrefer.
ENDLOOP.
itab_size = lines( gt_instmunic_f ).
WRITE: / 'Internal table populated with', itab_size, ' lines'.
我要实现的基本任务是修改一个table上的特定字段, 从另一个人那里拉取价值。他们有一个共同的领域( pod = vrefer(9) )。提前感谢您的宝贵时间。
They have a common field ( pod = vrefer(9) )
这是一个错误的假设,因为它们都不是字段,而是一个字段。
如果您确实需要通过 SQL、 完成该任务,我建议您检查本地 SQL 句子,例如 SUBSTRING,并检查您是否可以设法在 EXEC_SQL 或(更好)CL_SQL* 类.
中使用它们field(9)
是ABAP环境处理的子集操作,不能翻译成database-levelSQL语句(至少目前不行,但我'如果它会是,我会感到惊讶)。最好的选择是分别 select 数据集并手动合并它们(如果两者大致相等)或 pre-select 一个并使用 FAE/IN 子句。
如果您使用的是足够晚的 NetWeaver 版本,它可以在 7.51 上运行,您可以使用 OpenSQL 函数 LEFT
或 SUBSTRING
。您的查询类似于:
SELECT munic~mandt VREFER BIS AB ZZELECDATE ZZCERTDATE CONSYEAR ZDIMO ZZONE_M ZZONE_T USAGE_M USAGE_T M2MC M2MT M2RET EXEMPTMCMT EXEMPRET CHARGEMCMT
FROM ZCI00_INSTMUNIC AS MUNIC
INNER JOIN ever AS ev
ON MUNIC~POD EQ LEFT( EV~VREFER, 9 )
INTO corresponding fields of table GT_INSTMUNIC_F.
请注意,INTO
子句也需要移至命令末尾。