选择和内部联接中的DB2 SQL If语句

时间:2018-12-17 16:13:49

标签: sql db2 ibm-midrange

我有一个简单的查询。我正在做一个简单的选择(见下文)。现在,它可以正常工作,我想对另一个表进行内部联接,并在其中进行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              

1 个答案:

答案 0 :(得分:2)

尚不完全清楚,但我认为您想要这样做:

<li>

根据评论,您需要这样的内容:

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;