Выберите поле из подзапроса - PullRequest
0 голосов
/ 07 июня 2019

Можем ли мы иметь в запросе выбора поле из подзапроса? Как

select sp~carrid, sp~connid,
       carrname = ( select CARRNAME from scarr as sc )
into TABLE @data(it_flight)
FROM spfli as sp.

1 Ответ

2 голосов
/ 07 июня 2019

Как вы предлагаете, не существует простого синтаксиса ABAP SQL, но есть следующие обходные пути.

Начиная с версии 7.51, вы можете использовать Стандартные табличные выражения :

WITH
  +carrname_af AS (
      SELECT carrname FROM scarr WHERE carrid = 'AF' ),
  +carrname_lh AS (
      SELECT carrname FROM scarr WHERE carrid = 'LH' )
  SELECT sp~carrid, sp~connid, af~carrname AS carrname_af,
        lh~carrname AS carrname_lh
      FROM spfli AS sp
        CROSS JOIN +carrname_af AS af
        CROSS JOIN +carrname_lh AS lh
      INTO TABLE @data(it_flight).

До 7.51 вам нужно использовать несколько операторов (здесь я использую короткий синтаксис, действительный только в 7.50 (из-за двух выражений хоста), но вы можете довольно легко адаптировать код для более ранних версий):

SELECT sp~carrid, sp~connid, @( VALUE s_carrname( ) ) AS carrname_af,
      @( VALUE s_carrname( ) ) AS carrname_lh
    FROM spfli AS sp
    INTO TABLE @data(it_flight).

" Now initialize carrname_af and carrname_lh of IT_FLIGHT 
SELECT SINGLE carrname FROM scarr INTO @data(carrname_af)
    WHERE carrid = 'AF'.
SELECT SINGLE carrname FROM scarr INTO @data(carrname_lh)
    WHERE carrid = 'LH'.

DATA ls_flight LIKE LINE OF it_flight.
ls_flight = VALUE #( carrname_af = carrname_af carrname_lh = carrname_lh ).
MODIFY it_flight FROM ls_flight TRANSPORTING carrname_af carrname_lh
    WHERE carrid CP '*'.
...