简体   繁体   English

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

[英]DB2 SQL If statement inside select and inner join

I have a simple query. 我有一个简单的查询。 I am doing a simple select (see below). 我正在做一个简单的选择(见下文)。 It works now I want to do an inner join to another table and also do an if statement inside. 现在,它可以正常工作,我想对另一个表进行内部联接,并在其中进行if语句。 I have been searching the web and cannot find what I am looking for. 我一直在搜索网络,找不到我想要的东西。

I basically want to join into the item master table and if it is type 'E' do something else do something. 我基本上想加入项目主表,如果它是类型'E',则执行其他操作。

Can someone point me in the right direction? 有人可以指出我正确的方向吗?

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;    

This is what I have in RPG fixed: 这是我在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              

Not totally clear, but I think you want this: 尚不完全清楚,但我认为您需要这样做:

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;

Based on the comment you want something like this: 根据评论,您需要这样的内容:

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM