Текущее время: Чт, мар 28 2024, 11:52

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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