正在针对IBMI Series 7在sql上运行
我有一张桌子,上面存储着有关订单的信息。每行都有一个订单号(ON),零件号(PN)和序列号(SEQ)。每个ON将具有链接到它们的多个PN,并且每个部件号具有多个SEQ Number。每个序列号代表在零件上执行工作的顺序。一旦零件在某个位置并准备好进行处理,则在系统中的其他位置会显示一个标志。我想做的是获取某个位置的订单清单,该位置尚未到达,但在上一个位置已被关闭(这意味着零件在路上)。
我在下面列出了一个我认为应该可以使用的查询,但是出现以下错误:“列限定符或表t未定义”。我的问题在哪里?
Select * From (SELECT M2ON as Order__Number , M2SEQ as Sequence__Number,
M2PN as Product__Number,ML2OQ as Order__Quantity
FROM M2P
WHERE M2pN in (select R1PN FROM R1P WHERE (RTWC = '7411') AND (R1SEQ = M2SEQ)
)
AND M2ON IN (SELECT M1ON FROM M1P WHERE ML1RCF = '')
ORDER BY ML2OSM ASC) as T
WHERE
T.Order__Number in (Select t3.m2on from (SELECT *
FROM(Select * from m2p
where m2on = t.Order__Number and m2pn = t.Product__Number
order by m2seq asc fetch first 2 rows only
)as t1 order by m2seq asc fetch first row only
) as t3 where t3.m2stat = 'C')
编辑-有此问题的其他人的答案Clutton's Answer稍作修改即可工作,因此感谢您的快速答复!我必须命名外部表并在子查询中指定该表,否则as400会反冲并告诉我找不到列。我还必须按顺序号降序排列,以便获取低于该参数的最高记录(否则,例如,如果我的序列号为20,即使有10个可用,也可以获取5个,应该首先显示。我现在使用的子查询,请注意实际的查询名称m2p为T1。
IFNULL((
SELECT
M2STAT
FROM
M2P as M2P_1
WHERE
M2ON = T1.M2ON
AND M2SEQ < T1.M2SEQ
AND M2PN IN (select R1PN FROM R1P WHERE (RTWC = @WC) AND (R1SEQ = T1.M2SEQ))
ORDER BY M2SEQ DESC
FETCH FIRST ROW ONLY
), 'NULL') as PRIOR_M2STAT
只要阅读您的问题,就好像我经常模仿RPG READPE操作码一样。是M2P订单/序列的钥匙吗?如果是这样,那么这是一个基本的部分,可以帮助您扩展其余的查询。
我假设您正在尝试使用SQL通过键获取先前的记录。在RPG中,这就像使用Order / Seq键对文件的键进行READPE。
这是一个使用子查询获取先前记录的状态字段的示例。
SELECT
M2ON, M2PN, M2OQ, M2STAT,
IFNULL((
SELECT
M2STAT
FROM
M2P as M2P_1
WHERE
M2P_1.M2ON = M2ON
AND M2P_1.M2SEQ < M2SEQ
FETCH FIRST ROW ONLY
), '') as PRIOR_M2STAT
FROM
M2P
请注意,这IFNULL
会将子查询包装在中,以处理它是第一个序列号且不存在先前序列的情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句