DB2 SQL If внутри оператора select и внутреннего соединения - PullRequest
0 голосов
/ 17 декабря 2018

У меня простой запрос.Я делаю простой выбор (см. Ниже).Теперь это работает. Я хочу сделать внутреннее соединение с другой таблицей, а также сделать оператор 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 голосов
/ 17 декабря 2018

Не совсем ясно, но я думаю, что вы хотите это:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...