Текущее время: Чт, июл 24 2025, 01:05

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


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

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


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

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