Текущее время: Чт, июн 26 2025, 17:55

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


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

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


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

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