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

Откуда:
Сообщений: 63
Здравствуйте. Есть таблица tmp с полями fio, usluga, type. В поле usluga могут быть значения Сборка ПК со скидкой, Сборка ПК, Ремонт ПК, Ремонт ПК со скидкой.

В поле type значение 1 для вариантов Сборка ПК со скидкой, Сборка ПК и значение 2 для вариантов Ремонт ПК, Ремонт ПК со скидкой.

Как получить записи только тех пациентов, у которых в поле type и 1 и 2? Т.е. только тех пациентов, которым делали ремонт ПК и сборку ПК.
29 июн 20, 21:51    [22159270]     Ответить | Цитировать Сообщить модератору
 Re: Получить все записи у которых есть две услуги  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50370

having count(distinct type) = 2

Posted via ActualForum NNTP Server 1.5

29 июн 20, 22:08    [22159278]     Ответить | Цитировать Сообщить модератору
 Re: Получить все записи у которых есть две услуги  [new]
kolhoz
Member

Откуда:
Сообщений: 63
Dimitry Sibiryakov, А как будет выглядеть весь запрос?
29 июн 20, 22:10    [22159279]     Ответить | Цитировать Сообщить модератору
 Re: Получить все записи у которых есть две услуги  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2461
kolhoz


Как получить записи только тех пациентов, у которых в поле type и 1 и 2? Т.е. только тех пациентов, которым делали ремонт ПК и сборку ПК.


у Вас "тоесть" не соответствует " у которых в поле type и 1 и 2"

SQL> ed
Wrote file afiedt.buf

  1  with tmp( fio, usluga,type) as (
  2  select 'kolhoz','Сборка ПК со скидкой',1 from dual union all
  3  select 'kolhoz','Сборка ПК',1 from dual union all
  4  select 'kolhoz','Ремонт ПК со скидкой',2 from dual union all
  5  select 'kolhoz','Ремонт ПК',2 from dual union all
  6  --
  7  select 'Stax','Сборка ПК со скидкой',1 from dual union all
  8  select 'Stax','Ремонт ПК со скидкой',2 from dual union all
  9  select 'Stax','Ремонт ПК',2 from dual union all
 10  --
 11  select 'Dimitry','Сборка ПК со скидкой',1 from dual union all
 12  select 'Dimitry','Ремонт ПК со скидкой' ,2 from dual union all
 13  select 'Dimitry','Ремонт ПК',2 from dual union all
 14  select 'Dimitry','Ремонт ПК',2 from dual union all
 15  select 'Dimitry','Ремонт ПК',2 from dual union all
 16  select 'Dimitry','Утилизация ПК',3 from dual)
 17  select fio from tmp
 18  where type in (1,2) and usluga not like '%со скидкой'
 19* group by fio having count(distinct usluga)=2
SQL> /

FIO
-------
kolhoz


....
stax

Сообщение было отредактировано: 30 июн 20, 09:40
30 июн 20, 09:41    [22159454]     Ответить | Цитировать Сообщить модератору
 Re: Получить все записи у которых есть две услуги  [new]
kolhoz
Member

Откуда:
Сообщений: 63
Stax, нет. Мне нужно отобрать всех клиентов (все записи клиентов), которым оказывались услуги сборки и ремонта ПК независимо это со скидкой или без.

Одному клиенту могли оказать три услуги ремонт без скидки, ремонт со скидкой и сборка ПК.
Второму могли два раза оказать услугу ремонта ПК, но не сборки, тогда такой пациент не нужен.
30 июн 20, 10:17    [22159477]     Ответить | Цитировать Сообщить модератору
 Re: Получить все записи у которых есть две услуги  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2461
kolhoz
Stax, нет. Мне нужно отобрать всех клиентов (все записи клиентов), которым оказывались услуги сборки и ремонта ПК независимо это со скидкой или без.

Одному клиенту могли оказать три услуги ремонт без скидки, ремонт со скидкой и сборка ПК.
Второму могли два раза оказать услугу ремонта ПК, но не сборки, тогда такой пациент не нужен.


так клиентов или все записи?

ps
если нужно ремонт% И сборка% то Dimitry Sibiryakov 22159278
SQL> ed
Wrote file afiedt.buf

  1  with tmp( fio, usluga,type) as (
  2  select 'kolhoz','Сборка ПК со скидкой',1 from dual union all
  3  select 'kolhoz','Сборка ПК',1 from dual union all
  4  select 'kolhoz','Ремонт ПК со скидкой',2 from dual union all
  5  select 'kolhoz','Ремонт ПК',2 from dual union all
  6  --
  7  select 'Stax','Ремонт ПК со скидкой',2 from dual union all
  8  select 'Stax','Ремонт ПК со скидкой',2 from dual union all
  9  select 'Stax','Ремонт ПК со скидкой',2 from dual union all
 10  select 'Stax','Ремонт ПК со скидкой',2 from dual union all
 11  select 'Stax','Ремонт ПК',2 from dual union all
 12  --
 13  select 'Dimitry','Сборка ПК со скидкой',1 from dual union all
 14  select 'Dimitry','Ремонт ПК со скидкой' ,2 from dual union all
 15  select 'Dimitry','Ремонт ПК',2 from dual union all
 16  select 'Dimitry','Ремонт ПК',2 from dual union all
 17  select 'Dimitry','Ремонт ПК',2 from dual union all
 18  select 'Dimitry','Утилизация ПК',3 from dual)
 19  select fio from tmp
 20  where type in (1,2)
 21* group by fio having count(distinct type)=2
SQL> /

FIO
-------
kolhoz
Dimitry


.....
stax

Сообщение было отредактировано: 30 июн 20, 10:38
30 июн 20, 10:34    [22159486]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить