Текущее время: Пт, июл 25 2025, 05:45

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 09:08 
Менеджер
Менеджер

Зарегистрирован:
Пн, июн 30 2008, 17:16
Сообщения: 690
Коллеги, такой вопрос.
есть переменная - p_x
таблица tbl
я хочу написать такой селект:
select * from tbl
where
tbl~x=p_x or p_x = ''

т.е. мне нужно, чтобы если переменная p_x = '', её значение при выборе не учитывалось бы
пока кроме такого:
if p_x = ''
select * from tbl.
else
select * from tbl where tbl~x = p_x
endif.

ничего в голову не приходит, но это очень неудобно
можно как-то красивее?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 09:24 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
если правильно суть проблемы понял то вам поможет RANGE

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 10:31 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 08 2010, 11:37
Сообщения: 322
А по моему очень даже красиво и понятно. :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 11:33 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
LELUK написал(а):
А по моему очень даже красиво и понятно. :D

Это хорошо, когда селект простой как в примере. В случае непростого повторяющегося селекта получаем сложность внесения изменений.
RANGE в данном случае намного предпочтительней.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 11:48 
Менеджер
Менеджер

Зарегистрирован:
Пн, июн 30 2008, 17:16
Сообщения: 690
range это да, но мне из переменной тогда нужно перед select-ом этот range создать, тоже лишний код. Вот бы его как-нибудь сразу в строке where определить. Возможно такое?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 11:51 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Osm написал(а):
range это да, но мне из переменной тогда нужно перед select-ом этот range создать, тоже лишний код. Вот бы его как-нибудь сразу в строке where определить. Возможно такое?

Не могу придумать. Скажу разве что вот такое возможно :
Code:
WHERE ... in(p_x, p_y)
, где p_x, p_y - переменные.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 12:09 
Менеджер
Менеджер

Зарегистрирован:
Пн, июн 30 2008, 17:16
Сообщения: 690
__Gennady написал(а):
Не могу придумать. Скажу разве что вот такое возможно :
Code:
WHERE ... in(p_x, p_y)
, где p_x, p_y - переменные.

это не совсем то, т.к. если p_x будет равно пустоте, то оно из рассмотрения не исключится и из таблицы выберутся только те записи, у которых поле x пустое.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 12:11 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Osm написал(а):
это не совсем то, т.к. если p_x будет равно пустоте, то оно из рассмотрения не исключится и из таблицы выберутся только те записи, у которых поле x пустое.

Я бы даже сказал совсем не то, но вдруг пригодится.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 12:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Osm написал(а):
range это да, но мне из переменной тогда нужно перед select-ом этот range создать, тоже лишний код. Вот бы его как-нибудь сразу в строке where определить. Возможно такое?

Выбирайте: или пишете код для заполнения RANGE и не мучаетесь с WHERE, или мучаетесь с лишним кодом в WHERE.
Особенно если такой параметр не один ;)
Имхо удобнее написать код для заполнения RANGE.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Пт, фев 03 2012, 20:26 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Osm написал(а):
...мне нужно, чтобы если переменная p_x = '', её значение при выборе не учитывалось бы
пока кроме такого:
if p_x = ''
select * from tbl.
else
select * from tbl where tbl~x = p_x
endif.

ничего в голову не приходит, но это очень неудобно
можно как-то красивее?
Если оптимальность роли не играет:
Code:
select * from tbl into table it_tbl.
if p_x <> ''.
  delete it_tbl where x <> p_x.
endif.
:)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Вс, фев 05 2012, 15:38 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Самый простой вариант:
Code:
select *
  from tbl
  where
    tbl~x like p_x.

Где p_x = 'X'
или p_x = '_' (или '%')

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Вт, фев 07 2012, 15:13 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, июн 15 2007, 16:24
Сообщения: 98
Osm написал(а):
Коллеги, такой вопрос.
есть переменная - p_x
таблица tbl
я хочу написать такой селект:
select * from tbl
where
tbl~x=p_x or p_x = ''


В некоторых частных случаях не стоит забывать про

Code:
SELECT-OPTIONS s_x FOR mara-lvorm NO INTERVALS NO-EXTENSION.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как в условии WHERE использовать значение переменной слева в операторе сравнения
СообщениеДобавлено: Ср, фев 08 2012, 11:50 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Да, забыл. Еще можно:
Code:
data: cond_where type string.
if p_x <> ''.
  cond_where = 'tbl~x = p_x'.
endif.
select * from tbl into ...
  where (cond_where).


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

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


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

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


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

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