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

Откуда:
Сообщений: 205
Добрый вечер. Помогите пожалуйста составить запрос.
Имеется таблица с несколькими полями. В одном значения повторяются. Нужно вывести все записи, где это значение повторяется, причем со всеми дублями.
Спасибо.
13 дек 18, 16:28    [21763199]     Ответить | Цитировать Сообщить модератору
 Re: вывод одинаковых записей вместе с дублями  [new]
TsYekaterina
Member

Откуда:
Сообщений: 205
сделала так
[code]with x as (select tpr, pan, count(*) over (partition by pan) as c ;
from unr) select tpr, pan from x where c > 1[code], но vpf 6.0 не знает такой команды...
13 дек 18, 16:35    [21763206]     Ответить | Цитировать Сообщить модератору
 Re: вывод одинаковых записей вместе с дублями  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7819
Выбрать записи с повторяющимися (дублирующими) значениями поля
13 дек 18, 18:10    [21763346]     Ответить | Цитировать Сообщить модератору
 Re: вывод одинаковых записей вместе с дублями  [new]
TsYekaterina
Member

Откуда:
Сообщений: 205
ВладимирМ,

вывести не просто записи, которые повторяются в поле (при order by having выводится просто запись, которая повторяется несколько раз), а вывести эту запись вместе с дублями.
15 дек 18, 19:46    [21764931]     Ответить | Цитировать Сообщить модератору
 Re: вывод одинаковых записей вместе с дублями  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7819
А по ссылке пройти не судьба? Там именно ответ на этот вопрос и дан. Разумеется, если у таблицы есть уникальны идентификатор записи.

Ну, грубо, это запрос, который отбирает записи по факту существования хотя бы еще одной записи с тем же реквизитами (exists()), но у которой значение ключевого поля (Primary Key, если так будет понятнее) отлично от значения текущей записи. Не подсчет общего количества, а просто факт наличия хотя бы еще одной. А то, что это будет "другая" запись как раз и определяется по ключевому полю

Если у таблицы нет уникального идентификатора записи (это грубейшее нарушение структуры данных, но в старых базах так делали), то придется делать через 2 запроса. Сначала найти дубли через Having, потом используя результат этого запроса искать сами записи.
16 дек 18, 16:36    [21765362]     Ответить | Цитировать Сообщить модератору
 Re: вывод одинаковых записей вместе с дублями  [new]
TsYekaterina
Member

Откуда:
Сообщений: 205
ВладимирМ
Если у таблицы нет уникального идентификатора записи (это грубейшее нарушение структуры данных, но в старых базах так делали), то придется делать через 2 запроса. Сначала найти дубли через Having, потом используя результат этого запроса искать сами записи.


вот именно это мне и надо! спасибо!
17 дек 18, 08:12    [21765637]     Ответить | Цитировать Сообщить модератору
 Re: вывод одинаковых записей вместе с дублями  [new]
TsYekaterina
Member

Откуда:
Сообщений: 205
ВладимирМ,

можно я Вас еще спрошу?
сделала так:
SELECT * FROM unr WHERE tpr IN (select tpr from unr group by tpr having count(tpr)>1 )
, все получилось.
как вывести из этого следующее:
если хотя бы у одной из повторяющейся записи в поле pan есть A, то не выводить эту запись вообще (вместе с дублями)?
17 дек 18, 09:31    [21765661]     Ответить | Цитировать Сообщить модератору
 Re: вывод одинаковых записей вместе с дублями  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7819
Подсчитать количество записей, у которых в поле pan есть А. Отобрать только те группы, где это количество равно нулю

Но поскольку в рамках count() такой функциональности нет, то вопрос подсчета решается через sum(iif(...)). Примерно так

SELECT * FROM unr ;
WHERE tpr IN (select tpr ;
			from unr ;
			group by tpr ;
			having count(tpr)>1 ;
				and sum(iif(pan like '*A*', 1, 0) = 0) ;
			)
17 дек 18, 12:01    [21765773]     Ответить | Цитировать Сообщить модератору
 Re: вывод одинаковых записей вместе с дублями  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7819
Скобки не там поставил и немного с синтаксисом напутал

SELECT * FROM unr ;
WHERE tpr IN (select tpr ;
			from unr ;
			group by tpr ;
			having count(tpr)>1 ;
				and sum(iif(pan like '%A%', 1, 0)) = 0 ;
			)


В FoxPro внутри команды SQL можно использовать нативные функции FoxPro. В частности, функцию Like() у которой как раз звездочки вместо процентов ставятся. Вот и перепутал

Т.е. можно еще так

SELECT * FROM unr ;
WHERE tpr IN (select tpr ;
			from unr ;
			group by tpr ;
			having count(tpr)>1 ;
				and sum(iif(like('*A*',pan), 1, 0)) = 0 ;
			)
17 дек 18, 12:10    [21765779]     Ответить | Цитировать Сообщить модератору
 Re: вывод одинаковых записей вместе с дублями  [new]
TsYekaterina
Member

Откуда:
Сообщений: 205
ВладимирМ,

Большое Вам спасибо!!!
17 дек 18, 12:40    [21765793]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить