-- как выбрать в запросе записи с полем 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'
нутром чую должно быть просто
простой SQL таск
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Lepsik
- Житель
- Сообщения: 522
- Зарегистрирован: 17 фев 2003, 18:34
- Откуда: Berlin
- Контактная информация:
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
- Lepsik
- Житель
- Сообщения: 522
- Зарегистрирован: 17 фев 2003, 18:34
- Откуда: Berlin
- Контактная информация:
- Lepsik
- Житель
- Сообщения: 522
- Зарегистрирован: 17 фев 2003, 18:34
- Откуда: Berlin
- Контактная информация:
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
так пойдет?
Код: Выделить всё
create table tab
(
a int primary key,
b varchar(10)
)
insert into tab values ( 1, 'a')
insert into tab values ( 2, 'a')
insert into tab values ( 3, 'a')
insert into tab values ( 4, 'b')
insert into tab values ( 5, 'b')
insert into tab values ( 6, 'b')
insert into tab values ( 7, 'c')
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
- Lepsik
- Житель
- Сообщения: 522
- Зарегистрирован: 17 фев 2003, 18:34
- Откуда: Berlin
- Контактная информация:
вау. ну зачем так сложно. яже просил по-проще. такие конструкции наверное час времени отнимают. можно же по и так :
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
--тебе платят за ту работу что ты тут постоянно спрашиваешь. так-что делись. тебе чисто символически 25 каксов в час
договорились симолически поделюсь.
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
--тебе платят за ту работу что ты тут постоянно спрашиваешь. так-что делись. тебе чисто символически 25 каксов в час
договорились симолически поделюсь.

- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
во первых я потратил 10 минут на этоLepsik писал(а):вау. ну зачем так сложно. яже просил по-проще. такие конструкции наверное час времени отнимают. можно же по и так :
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

во вторых твой селект не работает. чтобы он заработал я исправил две ошибки

в третьих даже после этого он не вернул результат который соответствует требованиям.

Код: Выделить всё
a b
----------- ----------
1 a
2 a
3 a
4 b
5 b
6 b
Код: Выделить всё
a b
----------- ----------
1 a
2 a
4 b
5 b
