Текущее время: Пт, июн 27 2025, 10:40

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Open SQL вычисляемые поля.
СообщениеДобавлено: Ср, сен 09 2015, 11:31 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пт, мар 20 2009, 11:42
Сообщения: 46
Добрый день , господа!
почитала я много грустного на форуме об ограниченности возможностей OPEN SQL,
но тем неменее нашла, как делать конкатинацию полей при выботке в результирующую таблицу.

теперь теплится надежда, а может можно сделать в рамках OPEN SQL такую штуку:

select t1.a, t1.b, t1.a*t1.b as c
into table a
from t1

и как это будет выглядеть в синтаксисе ABAP

или такое можно сделать только в Native SQL ???

P.S. Проблема в том , что с Native SQL вообще не работала и не представляю как обратиться к таблицам (допустим anlp)

заранее благодарна за отклики на мою проблемую


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Ср, сен 09 2015, 11:55 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Все зависит от версии ABAPа, которая у вас стоит. В 7.40 можно такое сделать.
В более ранних версиях насколько я помню нет, придется делать через выборку во внутреннюю таблицу.

Выглядеть будет примерно вот так:
Code:
SELECT carrid,
       connid,
       fldate,
       price,
       seatsocc,
       ( price * seatsocc ) AS col1  FROM sflight INTO TABLE @DATA(tab).

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Ср, сен 09 2015, 13:13 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пт, мар 20 2009, 11:42
Сообщения: 46
Спасибо, попробую, только вот это не смогла причитать
8051core написал(а):
INTO TABLE @DATA(tab).
[/code]



Что означает знак @ перед названием таблицы? далее DATA - название таблицы, а tab - структура?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Ср, сен 09 2015, 13:31 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
@DATA() это нововведение ABAPa 7.40

Теперь вместо:
Code:
TYPES:
  BEGIN OF flight_schedule_type,
    carrid    TYPE s_carr_id,
    connid    TYPE s_conn_id,
    countryfr TYPE land1,
    countryto TYPE land1,
  END OF flight_schedule_type.

DATA flight_schedules TYPE STANDARD TABLE OF flight_schedule_type.

SELECT carrid connid countryfr countryto
  FROM spfli
  INTO TABLE flight_schedules.

можно просто писать:
Code:
SELECT carrid, connid, countryfr, countryto
  FROM spfli
  INTO TABLE @DATA(flight_schedules).

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Ср, сен 09 2015, 14:41 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пт, мар 20 2009, 11:42
Сообщения: 46
Понятно... у нас вроде как 7.0 версия....
так что все очень грустно

и запятые в перечислении полей не понимает и скабки с умножением...
в общем в OPEN SQL - подобное не пройдет

прийдется ковырять как это делать в NATIVE...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, сен 10 2015, 11:10 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 10 2015, 10:10
Сообщения: 1
Смотрите справку на EXEC SQL. Там есть пример для NATIVE SQL. Но суммирование пары полей не причина для использования NATIVE SQL.
Обычная выборка в OPEN SQL и последующий цикл отрабатывают быстро если грамотно писать.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, сен 10 2015, 13:54 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
lk написал(а):
Добрый день , господа!
почитала я много грустного на форуме об ограниченности возможностей OPEN SQL,
но тем неменее нашла, как делать конкатинацию полей при выботке в результирующую таблицу.

Code:
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_tab
FROM ...
WHERE ...

LOOP AT lt_tab ASSIGNING <fs>.
  <fs>-c = <fs>-a * <fs>-b.
ENDLOOP.

И в чем заключается грусть? :?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, окт 08 2015, 14:16 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пт, мар 20 2009, 11:42
Сообщения: 46
Грусть в том, что вот этого никак не сделать в OPEN SQL:
EXEC SQL.
SELECT DISTINCT
anlu.zzdatvvekspl,
round( round( months_between(to_date(:p_date,'yyyymmdd'),to_date(anlu.zzdatvvekspl,'yyyymmdd')),0)/12,0) as month
INTO :wa_anlu
FROM anla a
LEFT JOIN anlu ON
anlu.bukrs = a.bukrs AND
anlu.anln1 = a.anln1 AND
anlu.anln2 = a.anln2

WHERE a.BUKRS = :p_bukrs AND
a.ANLN1 = :str_a


ENDEXEC.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, окт 08 2015, 14:27 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пт, мар 20 2009, 11:42
Сообщения: 46
Сейчас бьюсь над другой продлеммой надо anla соединить с cdhdr
в anla-anlk ='120000000000'
a cdhdr-objectid ='1 12000000000000'

select ORACL можно было бы воспользоваться anla.anlk1 = substr (cdhdr.objectid ,4,12)
а в OPEN SQL нет возможности вырезать прям в селекте часть поля и сравнить...

Но в Navite SQL нет нашла возможности обработать масив значений с селекционного экрана значение С по ПО
... в общем прийдется кучу селектов писать, а хотелось бы один... :(


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, окт 08 2015, 14:36 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пт, мар 20 2009, 11:42
Сообщения: 46
Porsche‎ написал(а):
Смотрите справку на EXEC SQL. Там есть пример для NATIVE SQL. Но суммирование пары полей не причина для использования NATIVE SQL.
Обычная выборка в OPEN SQL и последующий цикл отрабатывают быстро если грамотно писать.


Конкатенацию можно сделать и бех цикла:

SELECT. Конкатинация строк.

*1. Отпсиание типа таблицы
TYPES: BEGIN OF table_ok,
anln1 TYPE anla-anln1, " Номер ОС
zz_field TYPE char100, " Название основногоср
txa50 TYPE anla-txa50, " Название ОС продолжение
END OF table_ok.
*2. описание самой таблицы
DATA: vib_ok TYPE STANDARD TABLE OF table_ok WITH HEADER LINE,
wa_ok TYPE table_ok.


select anln1 txt50 as zz_field+0(50)
txa50 as zz_field+50(50)
into corresponding fields of table vib_ok
from anla
WHERE anla~ANLN1 = '120000000205'.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, окт 08 2015, 14:54 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пт, мар 20 2009, 11:42
Сообщения: 46
Code:
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_tab
FROM ...
WHERE ...

LOOP AT lt_tab ASSIGNING <fs>.
  <fs>-c = <fs>-a * <fs>-b.
ENDLOOP.


LOOP - Это не красивое решение. А я же девочка! Мне хочется чтоб все было красиво, и программы в том числе.
:D
Это решение красивее:
Code:
select anln1 txt50 as zz_field+0(50)
             txa50 as zz_field+50(50)
into corresponding fields of table vib_ok
from anla
WHERE anla~ANLN1 = '120000000205'.


я надеюсь все понимают, что WHERE anla~ANLN1 = '120000000205' - это утрированно.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, окт 08 2015, 15:13 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
lk написал(а):
LOOP - Это не красивое решение. А я же девочка! Мне хочется чтоб все было красиво, и программы в том числе.


вам шашечки, или ехать ..? :shumlol:

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, окт 08 2015, 15:23 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
lk написал(а):
LOOP - Это не красивое решение. А я же девочка! Мне хочется чтоб все было красиво, и программы в том числе.

ABAP в принципе нет тот язык где будет все красиво и лаконично. Это Вы консерваторией ошиблись.

И еще небольшой совет, не надо при решении стандартных задач без особой необходимости использовать Native SQL.
Вас потом ваши же коллеги будут тихо ненавидеть за такие костыли в программах.

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, окт 08 2015, 15:27 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
lk написал(а):
Сейчас бьюсь над другой продлеммой надо anla соединить с cdhdr
в anla-anlk ='120000000000'
a cdhdr-objectid ='1 12000000000000'

Зачем соединять эти таблицы в рамках одного запроса?
Выберите сначала нужные ключи из ANLA, потом дополните их необходимой информацией и уже делайте запрос к CDHDR

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Open SQL вычисляемые поля.
СообщениеДобавлено: Чт, окт 08 2015, 15:59 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пт, мар 20 2009, 11:42
Сообщения: 46
nicky555 написал:
lk написал(а):
LOOP - Это не красивое решение. А я же девочка! Мне хочется чтоб все было красиво, и программы в том числе.


вам шашечки, или ехать ..? :shumlol:


:)))))))))))
мне ехать с шашечками!

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

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


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

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


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

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