Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Выбор элемента по условию  [new]
Varandey
Member

Откуда:
Сообщений: 14
Доброго времени суток!

Есть такая таблица:

NAME............ID............STATE

A...................11.............X
A...................24.............X
A...................32.............X
A...................40.............Y
B.....................1.............X
B...................20.............X
B...................34.............X
B...................47.............X
B...................55.............X
C...................12.............X
C...................26.............X

Есть некие элементы с именами A и B. У каждого элемента есть ряд состояний, которые указаны в поле ID. У каждого состояния есть статус, который указан в поле STATE.
Задача - из этой таблицы выбрать только те имена объектов,статусы состояний которых содержат только X. А если хоть одно состояние объекта принимает значение Y,то такой объект не брать в выдачу запроса.
Т.е. для этой таблицы,в выдачу должны попасть имена объектов B и C,а объект A не попадет,т.к. одно из его состояний приняло значение Y.

Подскажите,пожалуйста,есть ли удобная аналитическая функция для этой цели,что не городить огород?
12 май 14, 22:09    [16006981]     Ответить | Цитировать Сообщить модератору
 Re: Выбор элемента по условию  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
not having
12 май 14, 22:13    [16006996]     Ответить | Цитировать Сообщить модератору
 Re: Выбор элемента по условию  [new]
Изя Кацман
Member

Откуда: Великий Эксперимент
Сообщений: 2019
SELECT name FROM tab
GROUP BY state
HAVING COUNT(DISTINCT state) = 1
   AND MAX(state) = 'X'
12 май 14, 22:43    [16007107]     Ответить | Цитировать Сообщить модератору
 Re: Выбор элемента по условию  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Очепятка:

Изя Кацман
SELECT name FROM tab
GROUP BY state
HAVING COUNT(DISTINCT state) = 1
   AND MAX(state) = 'X'


Выдаст "not group by expression".

SELECT name FROM tab
GROUP BY name
 HAVING COUNT(DISTINCT state) = 1
   AND MAX(state) = 'X'


или

SELECT name FROM tab
GROUP BY name
 HAVING 'X' = ALL(MIN(state),MAX(state))



SY.

Сообщение было отредактировано: 12 май 14, 23:03
12 май 14, 23:00    [16007187]     Ответить | Цитировать Сообщить модератору
 Re: Выбор элемента по условию  [new]
Изя Кацман
Member

Откуда: Великий Эксперимент
Сообщений: 2019
SY,

Да, опечатался

Спасибо за поправку! :)
12 май 14, 23:20    [16007291]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить