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

Откуда:
Сообщений: 626
Таблица:
IDabcvalue
1????
2????
3????
4????
5????

запрос выведет агрегаты записей, повторяющихся несколько раз
select 
    count (id) IDCount, 
    sum(value), 
    a, 
    b,
    c
from mytable
group by b,c,d
having count(id)>1

а как можно вывести сами эти записи? Не используя циклы.
Если бы группируемый столбец был один (напр., а), то я бы сделала так:
select * 
from mytable 
where a in 
(
    select 
        a
    from mytable
    group by a
    having count(id)>1)

а вот как сравнить сразу несколько полей, я не знаю :-(
2 июл 14, 12:24    [16248121]     Ответить | Цитировать Сообщить модератору
 Re: А возможно сделать запрос тех записей, которые повторяются много раз?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nika gnome
а вот как сравнить сразу несколько полей, я не знаю

Изучить JOIN/EXISTS
2 июл 14, 12:25    [16248128]     Ответить | Цитировать Сообщить модератору
 Re: А возможно сделать запрос тех записей, которые повторяются много раз?  [new]
Nika gnome
Member

Откуда:
Сообщений: 626
спасибо за отсылку. Про exists я не знала, буду читать.
А join - да, решает проблему. Как-то в голову не пришло, что таблицу саму с собой же сцепить можно.
2 июл 14, 12:30    [16248169]     Ответить | Цитировать Сообщить модератору
 Re: А возможно сделать запрос тех записей, которые повторяются много раз?  [new]
Добрый Э - Эх
Guest
Nika gnome,

если версия сервера позволяет, то можно использовать оконный count(1) over(partition by...)
2 июл 14, 12:57    [16248377]     Ответить | Цитировать Сообщить модератору
 Re: А возможно сделать запрос тех записей, которые повторяются много раз?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4900
Nika gnome,

SELECT * FROM 
(
select 
    count (*) OVER (PARTITION BY b,c,d) IDCount,  T.*
from mytable T
) T
WHERE IDCount > 1
ORDER BY IDCount DESC 
2 июл 14, 13:51    [16248873]     Ответить | Цитировать Сообщить модератору
 Re: А возможно сделать запрос тех записей, которые повторяются много раз?  [new]
Nika gnome
Member

Откуда:
Сообщений: 626
a_voronin,

спасибо)) отличное решение, использую его. О такой конструкции я не знала.
2 июл 14, 15:02    [16249663]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить