Есть таблица, в ней числовое поле — назовем его Kod, задача — составить такой SQL запрос, чтобы в результирующем наборе остались только записи с такими значениями Kod, которые встречаются, скажем > 2 раз в таблице?
Например, есть две таблицы, связанные как Мастер-Детаил через поле Kod, назовем эти таблицы Master и Detail. Например:
---
В таблице Detail записи 0,1,4 имеют MId = 1, поскольку таких записей 3 они должны попасть в результирующий набор. И записи 2,3,5 имеют MId = 0, поэтому они тоже должны помасть в результат. Тогда как запись 6 только одна, поэтому она в результат попасть не должна.
Подскажите как это реализовать.. Таблицы Paradox, работаю через BDE/Delphi6.
Здравствуйте, Demon, Вы писали:
D>Здравствуйте, Аноним, Вы писали:
А>>Есть таблица, в ней числовое поле — назовем его Kod, задача — составить такой SQL запрос, чтобы в результирующем наборе остались только записи с такими значениями Kod, которые встречаются, скажем > 2 раз в таблице?
А>>Detail: А>> | Id | MId | А>> | 0 | 1 | А>> | 1 | 1 | А>> | 2 | 0 | А>> | 3 | 0 | А>> | 4 | 1 | А>> | 5 | 0 | А>> | 6 | 2 | А>> ............. А>>[/code]
D>
D>SELECT T1.*, T2.cnt
D>FROM Detail AS T1
D>JOIN
D>(
D> SELECT MId, count(*) AS cnt
D> FROM Detail
D> GROUP BY MId
D>) T2
D>ON T1.MId = T2.MId
D>WHERE T2.cnt > 2;
D>
А>>Подскажите как это реализовать.. Таблицы Paradox, работаю через BDE/Delphi6. D>В MS SQL 2005 проверял.
А разве в MSSQL нет HAVING?
SELECT mid, COUNT (*) AS cnt
FROM detail
GROUP BY mid
HAVING COUNT (*) > 2;
А>>>Есть таблица, в ней числовое поле — назовем его Kod, задача — составить такой SQL запрос, чтобы в результирующем наборе остались только записи с такими значениями Kod, которые встречаются, скажем > 2 раз в таблице?
FR>А разве в MSSQL нет HAVING?
Есть, но разница получается небольшая.
SELECT T1.*, T2.cnt
FROM Detail AS T1
JOIN
(
SELECT MId, count(*) AS cnt
FROM Detail
GROUP BY MId
HAVING count(*) > 2
) T2
ON T1.MId = T2.MId;
Есть подозрение (проверять лень) что на скорости выполнения это никак не скажется.
боюсь, что Lloyd щас скажет что я невнимательно прочитал , но насколько я понял, нужно получить результат чтото типа этого:
create table #table ( kod int,
name nvarchar(10)
)
insert into #table
select 1, 'test 1'
union all
select 1, 'test 1'
union all
select 1, 'test 1'
union all
select 2, 'test 2'
union all
select 3, 'test 3'
union all
select 3, 'test 3'
union all
select 3, 'test 3'
select *
from #table leftJoinTable
right join ( select kod
from #table
group by kod
having count(*) > 2
) rightJoinTable on rightJoinTable.kod = leftJoinTable.kod
drop table #table
1 test 1 1
1 test 1 1
1 test 1 1
3 test 3 3
3 test 3 3
3 test 3 3
Здравствуйте, DuШes, Вы писали:
DШ>Здравствуйте, Аноним, Вы писали: DШ>[...]
DШ>боюсь, что Lloyd щас скажет что я невнимательно прочитал , но насколько я понял, нужно получить результат чтото типа этого:
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, DuШes, Вы писали:
DШ>>Здравствуйте, Аноним, Вы писали: DШ>>[...]
DШ>>боюсь, что Lloyd щас скажет что я невнимательно прочитал , но насколько я понял, нужно получить результат чтото типа этого:
L>К бабке не ходи. Конечно неправильно.
Здравствуйте, Wyfinger, Вы писали:
W>Здравствуйте, Все!
W>Большое спасибо за ответы, завтра проверю на работе.
W>P.S. Не думал что развернется такая дискуссия..
Не. Ты мне скажи. Поддерживает Парадокс подзапросы или нет?
Здравствуйте, FunnyRabbit, Вы писали:
W>>P.S. Не думал что развернется такая дискуссия.. FR>Не. Ты мне скажи. Поддерживает Парадокс подзапросы или нет?
ну блин, уже даже мне интересно, поддерживает подзапросы или нет...
руки так и чешутся наставить минусов и плюсов, вот только кому?
Здравствуйте, _rasta, Вы писали:
_>Здравствуйте, FunnyRabbit, Вы писали:
W>>>P.S. Не думал что развернется такая дискуссия.. FR>>Не. Ты мне скажи. Поддерживает Парадокс подзапросы или нет?
_>ну блин, уже даже мне интересно, поддерживает подзапросы или нет...
_>руки так и чешутся наставить минусов и плюсов, вот только кому?
Здравствуйте, Lloyd, Вы писали:
L>Ребят, а вы первоначальное сообщение-то читали?
Тааак. Теперь и я попал под раздачу.
К чему претензии то?
К тому что нужен парадокс? Позволю себе не согласится с данной позицией. На текущий момент уже предложено несколько вариантов. Возможно ни один из них не будет работать на парадоксе, а возможно и будет. А если бы все авторы говорили "у меня нет парадокса, проверить не начем, не буду отвечать" ответов было бы 0.
Внимание, вопрос. Что лучше?
Еще вопрос. Если Wyfinger изначальный аноним, то кому он сказал спасибо? Нам, которые предложили варианты, или тебе, который говорит, что все ответы г...о?