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

Откуда: glubinka
Сообщений: 4256
-- как выбрать в запросе записи с полем type более 2 раз и числом 2

create table pic (int id, type char)
GO
insert into pic (id, type) VALUES (1, 'a')
insert into pic (id, type) VALUES (2, 'a')
insert into pic (id, type) VALUES (3, 'a')
insert into pic (id, type) VALUES (4, 'b')
insert into pic (id, type) VALUES (5, 'b')
insert into pic (id, type) VALUES (6, 'b')
insert into pic (id, type) VALUES (17, 'c')
GO
--

то есть результат должен быть

1, 'a'
2, 'a'
4, 'b'
5, 'b'

нутром чую должно быть просто

create view t1 as (select count(*)as num, type from picture group by type)
select * from pic where type in (select type from t1 where t1.num > 2)

часть решено, кроме выбора строго по записи на каждый тип
18 июл 03, 01:35    [266621]     Ответить | Цитировать Сообщить модератору
 Re: вроде не сложная логическая задачка  [new]
Smile
Member

Откуда:
Сообщений: 1148
select id, type from pic p1 inner join (select count(id), type from pic group by type having count(id)>=2) p2 on p1.type=p2.type
так?
18 июл 03, 01:43    [266622]     Ответить | Цитировать Сообщить модератору
 Re: вроде не сложная логическая задачка  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
о. да спасибо, это проще чем

select
min(a),
b
from
tab A
where
exists(select count(*) from tab B where B.b = A.b having count(*) >= 2)
group by
b
union
select
min(C.a),
C.b
from
tab C,
(
select
min(a) as a,
b
from
tab A
where
exists(select count(*) from tab B where B.b = A.b having count(*) >= 2)
group by
b
) D
where
D.b = C.b and
D.a < C.a
group by
C.b

drop table tab
18 июл 03, 10:26    [266811]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить