我有一个简单的查询。我正在做一个简单的选择(见下文(。现在它工作了,我想对另一个表进行内部联接,并在内部执行if语句。我一直在网上搜索,找不到我要找的东西。
我基本上想加入项目主表,如果它是类型"E",就做其他事情。
有人能给我指正确的方向吗?
EXEC SQL Declare RSCURSOR cursor for
SELECT A.*, B.*
FROM HPO A
INNER JOIN IIML01 B on A.PPROD = B.IPROD
IF B.IITYP <> 'E';
PCMT = B.IDESC;
ELSE;
PCMT = A.PCMT ;
WHERE PORD = :PON AND PLINE = :LIN;
EXEC SQL Open RSCURSOR;
EXEC SQL SET RESULT SETS Cursor RSCURSOR;
IF SQLSTATE = '00000';
RSL = '00';
ELSEIF SQLSTATE = '02000';
RSL = '10';
ELSE;
RSL = '20';
ENDIF;
这就是我在RPG中修复的:
C PPROD CHAIN IPI100IM 99
C *IN99 IFEQ '0'
C
C IITYP IFNE 'E'
C EVAL RS(CNT).PCMT = IDESC
C ELSE
C EVAL RS(CNT).PCMT = PCMT
C ENDIF
不完全清楚,但我认为你想要这个:
SELECT A.*, B.*
FROM HPO A
INNER JOIN IIML01 B on A.PPROD = B.IPROD
AND CASE WHEN B.IITYP <> 'E' THEN B.IDESC ELSE A.PCMT END = PCMT
WHERE PORD = :PON AND PLINE = :LIN;
根据您想要的评论:
SELECT CASE WHEN B.IITYP <> 'E' THEN B.IDESC ELSE A.PCMT END AS PCMT, A.*, B.*
FROM HPO A
INNER JOIN IIML01 B on A.PPROD = B.IPROD
WHERE PORD = :PON AND PLINE = :LIN;