Текущее время: Ср, июл 23 2025, 19:32

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Select from where ?
СообщениеДобавлено: Пт, сен 28 2007, 07:57 
Специалист
Специалист

Зарегистрирован:
Пт, фев 16 2007, 09:49
Сообщения: 157
Текст программы:

name1 like usr02-bname, "Имя пользователя
iskgrp(12) type c occurs 1 with header line. "Список групп
.....
Заполнение iskgrp значениями 'BC','SUPER','HR'
.....
select bname into name1 from usr02 where ... and class not in (iskgrp)...

Почему то не выполняется это условие, то есть пропускаются записи со значениями поля class, которые есть во внутренней таблице iskgrp.
А вот так работает ... and class not in ('BC','SUPER','HR')
Хотелось бы значения брать из таблицы.
Как правильно написать select тех строк, значения поля которых отсутствуют во внутренней таблице?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 28 2007, 08:08 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Code:
Notes
You cannot use replacement symbols in comparisons in LIKE, BETWEEN, or IN expressions.


Попробуйте значения перечислить в ranges с соотвествующим 'NE'


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 28 2007, 08:20 
Специалист
Специалист

Зарегистрирован:
Пт, фев 16 2007, 09:49
Сообщения: 157
Не совсем понял причем тут символы замены? :roll:
Допустим имеется одномерная внутренняя таблица intab(7) type c со значениями 'Roman ','Sergei ','Igor '.
И внешняя таблица exttab с полями name(7) type c, age(2) type c.

Неужели нельзя сделать выборку всех записей из таблицы extab, с именами не существующими в intab?
Select * from exttab where name not in (intab).

Вот так работает select * from exttab where name not in ('Roman','Sergei','Igor').


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 28 2007, 08:22 
Специалист
Специалист

Зарегистрирован:
Пт, фев 16 2007, 09:49
Сообщения: 157
vga написал(а):
Попробуйте значения перечислить в ranges с соотвествующим 'NE'

У меня внутренняя таблица при каждом запуске может иметь разные значения, то есть жестко перечислить значения в условии не получается.

Может синтаксис запроса у меня неправильный?
Может надо как-нибудь так where name not in table intab? (только это тоже не работает)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 28 2007, 08:55 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Попробуйте так:

intab = 'class not in (''BC'',''SUPER'',''HR'')'.
append intab.
select bname into name1 from usr02 where ... and (intab).

Строку в intab можете составлять какую угодно при помощи concatenate. И кстати про ranges вам правильно сказали, оно даже наверное будет проще

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 28 2007, 09:01 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
Damir написал(а):
vga написал(а):
Попробуйте значения перечислить в ranges с соотвествующим 'NE'

У меня внутренняя таблица при каждом запуске может иметь разные значения, то есть жестко перечислить значения в условии не получается.

Может синтаксис запроса у меня неправильный?
Может надо как-нибудь так where name not in table intab? (только это тоже не работает)

VGA тебе верный совет дал, используй RANGES. Грубо говоря это тоже внутренняя таблица


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 28 2007, 09:03 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Code:
RANGES: r_names FOR exttab-name.

r_names-sign = 'E'.
r_names-option = 'EQ'.
r_names-low = 'Igor'.
APPEND r_names.

r_names-low = 'Roman'.
APPEND r_names.

r_names-low = 'Sergei'.
APPEND r_names.

select * from exttab where name in r_names.


RANGES можете формировать динамически.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 28 2007, 09:13 
Специалист
Специалист

Зарегистрирован:
Пт, фев 16 2007, 09:49
Сообщения: 157
Спасибо всем за помощь! ) Сейчас попробую... ))


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 02 2007, 15:43 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, мар 02 2005, 20:19
Сообщения: 133
Откуда: Moscow
vga написал(а):
Code:
RANGES: r_names FOR exttab-name.

r_names-sign = 'E'.
r_names-option = 'EQ'.
r_names-low = 'Igor'.
APPEND r_names.

r_names-low = 'Roman'.
APPEND r_names.

r_names-low = 'Sergei'.
APPEND r_names.

select * from exttab where name in r_names.


RANGES можете формировать динамически.


Такой range будет некоррктным, т.к. условие в селекте раскладывается по OR.
Т.е. надо сделать r_names-sign = 'I', а в селекте class NOT IN r_names.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 02 2007, 16:26 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
Monarch написал(а):
vga написал(а):
Code:
RANGES: r_names FOR exttab-name.

r_names-sign = 'E'.
r_names-option = 'EQ'.
r_names-low = 'Igor'.
APPEND r_names.

r_names-low = 'Roman'.
APPEND r_names.

r_names-low = 'Sergei'.
APPEND r_names.

select * from exttab where name in r_names.


RANGES можете формировать динамически.


Такой range будет некоррктным, т.к. условие в селекте раскладывается по OR.
Т.е. надо сделать r_names-sign = 'I', а в селекте class NOT IN r_names.

А обьясните мне тёмному, почему он будет некорректным ?
Пусть раскладывается по OR, на здоровье ...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 02 2007, 17:40 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Данный конкретный селект, как бы он не разложился, будет коррректным.
st05 показывает
"MANDT" = :A0 AND NOT "BUKRS" IN ( :A1 , :A2, :A3 )


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 03 2007, 07:43 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
vga написал(а):
Данный конкретный селект, как бы он не разложился, будет коррректным.
st05 показывает
"MANDT" = :A0 AND NOT "BUKRS" IN ( :A1 , :A2, :A3 )

Так вот и я про это :)
Просто подумал, что Monarch имеет другое мнение по этому поводу.


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

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


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

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


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

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