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

Откуда:
Сообщений: 39
не могу составить запрос на выборку.
Есть 2 таблицы operation

id status task
--------------------------------
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 2 | 1 |
| 4 | 3 | 1 |
| 5 | 2 | 3 |
| 6 | 1 | 4 |
| 7 | 1 | 3 |
--------------------------------

task

id 2
--------------------------------
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |

--------------------------------
нужно вывести только те задачи у которых status = 1,2,3
2 июл 12, 09:10    [12802036]     Ответить | Цитировать Сообщить модератору
 Re: ms sql зарпос на выборку  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
legioner_007
у которых status = 1,2,3
т.е. задачи с таким набором статусов?
2 июл 12, 09:22    [12802079]     Ответить | Цитировать Сообщить модератору
 Re: ms sql зарпос на выборку  [new]
legioner_007
Member

Откуда:
Сообщений: 39
да ).
2 июл 12, 09:42    [12802176]     Ответить | Цитировать Сообщить модератору
 Re: ms sql зарпос на выборку  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
group by, having, join
2 июл 12, 10:00    [12802265]     Ответить | Цитировать Сообщить модератору
 Re: ms sql зарпос на выборку  [new]
RubinDm
Member

Откуда: SPb
Сообщений: 458
legioner_007,
use tempdb
go

create table task
  ( [id]      int not null
  );
go

create table [operation]
  ( [id]      int not null
  , [status]  int not null
  , [task]    int not null
  );
go

insert into [task] ( [id] )
values (1), (2), (3), (4)
;  

insert into [operation] ( [id],[status], [task] )
values (1,1,1), (2,2,2), (3,2,1), (4,3,1), (5,2,3), (6,1,4), (7,1,3)
;

-- если набор статусов заранее известен
select [o].[task]
from [operation] [o]
where [o].[status] in (1,2,3)
group by [o].[task]
having count(o.[status]) = 3 -- всего надо набрать три статуса
;

-- если набор статусов заранее НЕизвестен
declare @statuses table -- сюда будем складывать искомые статусы
  ( [status] int not null
  , primary key ( [status] )
  );
insert into @statuses ( [status] )
values (1), (2), (3) -- искомые статусы
;

select [o].[task]
from [operation] [o]
where [o].[status] in (select statusList.[status] from @statuses statusList)
group by [o].[task]
having count(o.[status]) = (select count(*) from @statuses statusList)
;

delete from @statuses;
insert into @statuses ( [status] )
values (1), (2) -- искомые статусы
;

select [o].[task]
from [operation] [o]
where [o].[status] in (select statuses.[status] from @statuses statuses)
group by [o].[task]
having count(o.[status]) = (select count(*) from @statuses statuses)
;

drop table [operation]
go

drop table [task]
go


зы: не ленитесь выкладывать скрипты для создания тестовых примеров. я понимаю, Вам лень, но это Ваши задачки, и нам тож Лень их решать.
2 июл 12, 14:55    [12804480]     Ответить | Цитировать Сообщить модератору
 Re: ms sql зарпос на выборку  [new]
legioner_007
Member

Откуда:
Сообщений: 39
RubinDm спасибо вам. Я уже сделал, с помощью подсказки Дедушки как ни странно это звучит). Но ваш метод универсален. Спасибо всем кто помог)
3 июл 12, 08:11    [12807474]     Ответить | Цитировать Сообщить модератору
 Re: ms sql зарпос на выборку  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
legioner_007
[b]...как ни странно это звучит
что ж тут странного то? :)
3 июл 12, 10:21    [12807951]     Ответить | Цитировать Сообщить модератору
 Re: ms sql зарпос на выборку  [new]
legioner_007
Member

Откуда:
Сообщений: 39
к твоему профессионализму это не имеет никакого отношения)) просто сама фраза "Дедушка помог sql запросом" вызвала улыбку у моих коллег.
3 июл 12, 10:58    [12808225]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить