Текущее время: Ср, апр 24 2024, 13:14

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Особенности синтаксиса select, concatenate
СообщениеДобавлено: Чт, мар 02 2017, 13:15 
Специалист
Специалист

Зарегистрирован:
Ср, окт 07 2015, 12:36
Сообщения: 124
Всем добрый день.

Хотел поинтересоваться, как правильно будет составить запрос такого типа (конкретно этот не компилится):

Code:
LOOP AT gt_data ASSIGNING <fs_data>.
    IF <fs_data>-kunnr IS NOT INITIAL.
      SELECT SINGLE name1
        FROM kna1
        WHERE kunnr EQ <fs_data>~kunnr
        INTO @DATA(lt_name1).
      SELECT SINGLE name2
        FROM kna1
        WHERE kunnr EQ <fs_data>~kunnr
        INTO @DATA(lt_name2).
      CONCATENATE lt_name1 lt_name INTO <fs_data>-debitor_name RESPECTING BLANKS.
    ENDIF.
............


Понятное дело, что если предварительно объявить переменные lt_name1 и lt_name2, а также wa_data type gt_data вместо <fs_data>, то всё будет работать.
Просто хотелось бы подобные мини-запросы делать "на лету". И ещё вопрос, можно ли склеить поля name1 и name2 в поле <fs_data>-debitor_name в пределах одного селекта, а не использовать concatenate отдельно (тогда и необходимость в lt_name1 и lt_name2 отпадёт)?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности синтаксиса select, concatenate
СообщениеДобавлено: Чт, мар 02 2017, 14:08 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 10:50
Сообщения: 197
А так прям не нравится?

Code:
  IF p_kunnr IS NOT INITIAL.
    SELECT SINGLE name1 name2
    FROM kna1
    INTO (lv_name1, lv_name2)
    WHERE kunnr EQ p_kunnr
    .

    CONCATENATE lv_name1 lv_name2 INTO lv_debitor_name RESPECTING BLANKS.
  ENDIF.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности синтаксиса select, concatenate
СообщениеДобавлено: Чт, мар 02 2017, 14:15 
Специалист
Специалист

Зарегистрирован:
Ср, окт 07 2015, 12:36
Сообщения: 124
Bimit написал(а):
А так прям не нравится?

Code:
  IF p_kunnr IS NOT INITIAL.
    SELECT SINGLE name1 name2
    FROM kna1
    INTO (lv_name1, lv_name2)
    WHERE kunnr EQ p_kunnr
    .

    CONCATENATE lv_name1 lv_name2 INTO lv_debitor_name RESPECTING BLANKS.
  ENDIF.


boreich написал(а):
Понятное дело, что если предварительно объявить переменные lt_name1 и lt_name2, а также wa_data type gt_data вместо <fs_data>, то всё будет работать.


Bimit, это, конечно, будет работать, но вопрос был как раз в том, чтобы не делать доп. объявлений переменных и осуществить конкатенейт строк в пределах селекта (просто я не знаю, возможно ли это). По вашему примеру придётся объявить lv_name1 и lv_name2 заранее.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности синтаксиса select, concatenate
СообщениеДобавлено: Чт, мар 02 2017, 14:28 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 10:50
Сообщения: 197
Bimit написал(а):
Bimit, это, конечно, будет работать, но вопрос был как раз в том, чтобы не делать доп. объявлений переменных и осуществить конкатенейт строк в пределах селекта (просто я не знаю, возможно ли это). По вашему примеру придётся объявить lv_name1 и lv_name2 заранее.


Я такого не видел )))

Чтобы выбрать два поля в запросе и сразу их объединить и еще пробелы поставить между полями (RESPECTING BLANKS) :D


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности синтаксиса select, concatenate
СообщениеДобавлено: Чт, мар 02 2017, 14:35 
Специалист
Специалист

Зарегистрирован:
Ср, окт 07 2015, 12:36
Сообщения: 124
Bimit написал(а):
Bimit написал(а):
Bimit, это, конечно, будет работать, но вопрос был как раз в том, чтобы не делать доп. объявлений переменных и осуществить конкатенейт строк в пределах селекта (просто я не знаю, возможно ли это). По вашему примеру придётся объявить lv_name1 и lv_name2 заранее.


Я такого не видел )))

Чтобы выбрать два поля в запросе и сразу их объединить и еще пробелы поставить между полями (RESPECTING BLANKS) :D


Да, почти верно. Я раньше так и написал:

CONCATENATE lt_name1 lt_name INTO <fs_data>-debitor_name RESPECTING BLANKS.

Только это не в одном запросе получается; не в пределах селекта. А вот можно ли конкатенейтить внутри селекта я не нашёл, к сожалению.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности синтаксиса select, concatenate  Тема решена
СообщениеДобавлено: Чт, мар 02 2017, 14:48 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
Code:
select name1 && @space && name2 as long_name
  into table @data(lt)
  from kna1
  where kunnr = @<fs_data>-kunnr.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности синтаксиса select, concatenate
СообщениеДобавлено: Чт, мар 02 2017, 14:50 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 10:50
Сообщения: 197
А кто запретил?

Code:
PARAMETERS: p_kunnr TYPE kunnr.

DATA: lv_debitor_name TYPE string.
DATA: lv_name1 TYPE name1_gp,
      lv_name2 TYPE name2_gp.

DATA: BEGIN OF ls_name,
   name1 TYPE name1_gp,
   name2 TYPE name2_gp,
  END OF ls_name.

IF p_kunnr IS NOT INITIAL.
  SELECT name1 name2
  INTO  ls_name
    FROM kna1
  WHERE kunnr EQ p_kunnr.



    CONCATENATE ls_name-name1 ls_name-name2 INTO lv_debitor_name RESPECTING BLANKS.
  ENDSELECT.
  WRITE lv_debitor_name.
ENDIF.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности синтаксиса select, concatenate
СообщениеДобавлено: Чт, мар 02 2017, 15:00 
Специалист
Специалист

Зарегистрирован:
Ср, окт 07 2015, 12:36
Сообщения: 124
Sam Stone написал(а):
Code:
select name1 && @space && name2 as long_name
  into table @data(lt)
  from kna1
  where kunnr = @<fs_data>-kunnr.


Sam Stone, огромное спасибо, работает!
Правда, для моего случая, переделанный пример должен выглядеть так:

Code:
LOOP AT gt_data ASSIGNING <fs_data>.
    IF <fs_data>-kunnr IS NOT INITIAL.
      SELECT SINGLE name1 && @space && name2
        FROM kna1
        INTO @<fs_data>-debitor_name
        WHERE kunnr EQ @<fs_data>-kunnr.


Но неважно. Суть ясна.
Bimit, тоже спасибо за содействие =)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Особенности синтаксиса select, concatenate
СообщениеДобавлено: Чт, мар 02 2017, 16:07 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Если число строк gt_data сильно больше числа уникальных дебиторов в этой табличке, то лучше бы буферизовать результат запроса к kna1.

_________________
Удача - результат нашего желания (© А. Нортон)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB