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

Есть табличка. Нужно запросом показать все строки, повторяющиеся по определенному полю.
Вариант с select id from t group by id не прокатит, так как он просто покажет, что что по этому полю есть дубликаты, а нужно их вывести.

спасибо.
27 июл 09, 16:29    [7465248]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
Есть еще такая штука, join назвается.
27 июл 09, 16:30    [7465260]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
dimmik
Guest
join же для связки таблиц, а таблица у меня одна
27 июл 09, 16:32    [7465268]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
А версия сервера какая?
27 июл 09, 16:32    [7465275]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
dimmik
Guest
sql 2005
27 июл 09, 16:34    [7465289]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Поиск дубликатов
27 июл 09, 16:35    [7465296]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
sfans
Member

Откуда:
Сообщений: 392
dimmik
join же для связки таблиц, а таблица у меня одна

А если join саму на себя, да по полю по которому надо искать повторения?
27 июл 09, 16:35    [7465303]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SET NOCOUNT ON;
USE tempdb;

IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(ID INT NOT NULL IDENTITY, X INT);
INSERT T(X)
          SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 0
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 0
UNION ALL SELECT 0
UNION ALL SELECT 5;

SELECT TOP 1 WITH TIES *
FROM T
ORDER BY SIGN(COUNT(*)OVER(PARTITION BY X)-1) DESC;

IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
27 июл 09, 16:38    [7465319]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SET NOCOUNT ON;
USE tempdb;

IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(ID INT NOT NULL IDENTITY, X INT);
INSERT T(X)
          SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 0
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 0
UNION ALL SELECT 0
UNION ALL SELECT 5;

SELECT *
FROM T
WHERE NOT EXISTS(SELECT X EXCEPT SELECT X FROM T TT WHERE T.ID<>TT.ID);

IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
27 июл 09, 16:42    [7465345]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SET NOCOUNT ON;
USE tempdb;

IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(ID INT NOT NULL IDENTITY, X INT);
INSERT T(X)
          SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 0
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 0
UNION ALL SELECT 0
UNION ALL SELECT 5;

WITH CTE AS(SELECT COUNT(*)OVER(PARTITION BY X)C,* FROM T)
SELECT ID, X
FROM CTE
WHERE C>1;

IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
Ещё?
27 июл 09, 16:44    [7465362]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
dimmik
Guest
Устроил вариант Паганеля

Спасибо!
27 июл 09, 17:17    [7465590]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех повторяющихся значений  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
dimmik
Устроил вариант Паганеля
Это не мой вариант, я просто разместил объяву
27 июл 09, 17:21    [7465618]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить