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

Откуда:
Сообщений: 625
Есть звонки по направлениям
звонок1 звонит на направления 1,2,3,6,8
звонок2 звонит на направления 3,6,8
звонок3 звонит на направления 2,6,8
звонок4 звонит на направления 1,2,3,6,7,8
звонок5 звонит на направления 2

нужно выбрать те звонки, котореы звонили только на направление 2 и больше никуда
т.е. нужно выбрать 5 звонок
12 окт 15, 12:27    [18266796]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume
12 окт 15, 12:29    [18266800]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе  [new]
Добрый Э - Эх
Guest
abort,

not exists тебе в помощь
12 окт 15, 12:32    [18266817]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе  [new]
_djХомяГ
Guest
100500 способов
также зависит от версии сервера
например

парсинг строки
12 окт 15, 12:35    [18266828]     Ответить | Цитировать Сообщить модератору
 Re: помощь в запросе  [new]
beggar_21
Member

Откуда:
Сообщений: 27
/*Нужное нам направление*/
declare @dir int = 2;

if (select object_id('call_log','u')) is not null drop table call_log;
create table call_log
(
id_row int not null identity(1,1),
id_caller nvarchar(3) not null,
id_direction int not null
);

/*Предполагаем что на одно направление можно позвонить не одни раз*/
insert into call_log(id_caller,id_direction)
values (N'c1',1),(N'c1',2),(N'c1',3),(N'c1',6),(N'c1',8),
       (N'c2',3),(N'c2',6),(N'c2',8),  
       (N'c3',2),(N'c3',6),(N'c3',8), 
       (N'c4',1),(N'c4',2),(N'c4',3),(N'c4',6),(N'c4',7),(N'c4',8),
       (N'c5',2),
       (N'c1',1),(N'c1',2),(N'c1',3),(N'c1',6),(N'c1',8),
       (N'c2',3),(N'c2',6),(N'c2',8),  
       (N'c3',2),(N'c3',6),(N'c3',8), 
       (N'c4',1),(N'c4',2),(N'c4',3),(N'c4',6),(N'c4',7),(N'c4',8),
       (N'c5',2);

with 
/*Кто совершал звонки на нужное направление*/
id_caller_dir_2 as
(select distinct id_caller from call_log where id_direction=@dir),
/*На какие направления звонили*/
distinct_dir as 
(select distinct id_caller,id_direction from call_log)
/*Сколко звонков было ещё у тех кто звонил на нужное направление*/
select icd2.id_caller from id_caller_dir_2 as icd2 
         join 
       distinct_dir as dd 
       on icd2.id_caller=dd.id_caller
group by icd2.id_caller
/*если направлений больше одного - они нам не интересны*/
having count(dd.id_direction)=1;
12 окт 15, 15:53    [18268155]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить