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

Откуда:
Сообщений: 22
id num
1 890
1 789
1 900
2 300
2 300
2 456
3 100
4 590
4 789
4 789

надо что бы на выходе оказалось
id num
2 300
2 300
4 789
4 789

не могу разобраться, id и num из разных таблиц.
mssql server 2008
10 сен 12, 08:00    [13137924]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
vanezy
Member

Откуда: Ekaterinburg->Moscow->Frankfurt
Сообщений: 122
если я правильно понял, вам нужно отобрать те записи, для которых существует как минимум один дубликат по значениям id и num, тогда вам поможет ... group by id, num having count(1) > 1, но тогда дубликаты выведутся по одному. Чтобы вывелись все, можно эту группировку подзапросом заджойнить с основным запросом по тем же полям id и num
10 сен 12, 08:24    [13137942]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
daraemon
Member

Откуда:
Сообщений: 22
vanezy, почти, мне надо что бы выводился с дубляжом больше чем один в поле num, а если делать по вашему совету то группируются и по id, я так пробовал, но надо что бы только по num
10 сен 12, 09:00    [13137994]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
daraemon
а если делать по вашему совету то группируются и по id, я так пробовал, но надо что бы только по num
Так уберите группировку по id

Просто из вашего примера понятно, что нужно группировать по id тоже.

Вы тогда опишите словами, что вам надо, а не ограничивайтесь примером.
10 сен 12, 09:05    [13138009]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
vanezy
Member

Откуда: Ekaterinburg->Moscow->Frankfurt
Сообщений: 122
тогда уберите id из group by
10 сен 12, 09:05    [13138010]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
daraemon
Member

Откуда:
Сообщений: 22
alexeyvg, виноват, простите.
пример:
id num
1 890
1 789
1 900
2 300
2 300
2 456
3 789
4 590
4 789
4 789

если делать
select id, num from cap
group by num, id having count(1) > 1
то и id будет группировать, а если я уберу id из группировки то выдаст ошибку потому что в селекте прописан id.
а если уж и id убрать из селекта, то будет это выглядеть примерно так:

id num
2 300
2 300
3 789
4 789
4 789

но мне так тоже не подойдет, мне нужно что бы показывало дубликаты в одном id т.е.
id num
3 789

здесь лишняя и нужно вот так
id num
2 300
2 300
4 789
4 789

уж простите, вроде бы как смог объяснил, уже по разному пробую не выходит =(
10 сен 12, 09:33    [13138095]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
daraemon
Member

Откуда:
Сообщений: 22
daraemon
а если уж и id убрать из селекта, то будет это выглядеть примерно так:

id num
2 300
2 300
3 789
4 789
4 789


вернее вот так
id num
2 300
3 789
4 789
10 сен 12, 09:39    [13138121]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
select id, min(num) from cap
group by id having count(1) > 1

Сообщение было отредактировано: 10 сен 12, 09:42
10 сен 12, 09:41    [13138124]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
qwerty112
Guest
daraemon
но мне так тоже не подойдет, мне нужно что бы показывало дубликаты в одном id т.е.
id num
3 789

здесь лишняя и нужно вот так

так, этот запрос
select id, num from cap
group by num, id having count(1) > 1

так и делает, что не так ?
10 сен 12, 09:45    [13138139]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
daraemon
Member

Откуда:
Сообщений: 22
Glory, вообще не то что надо =)
я наверно ужасно объясняю проблему
10 сен 12, 09:47    [13138150]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
daraemon
вернее вот так
id num
2 300
3 789
4 789
Т.е. 3, 789 тоже нужно показывать?

Нужно показать все строки, для которых есть одиноковые num, независимо от того, разные там id или нет?

Правильная формулировка?
10 сен 12, 10:24    [13138368]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 647
Что-то Вы и вправду путаетесь в показаниях
daraemon
vanezy, почти, мне надо что бы выводился с дубляжом больше чем один в поле num, а если делать по вашему совету то группируются и по id, я так пробовал, но надо что бы только по num

daraemon
но мне так тоже не подойдет, мне нужно что бы показывало дубликаты в одном id


А vanezy Вам сразу же посоветовал
vanezy
Чтобы вывелись все, можно эту группировку подзапросом заджойнить с основным запросом по тем же полям id и num
10 сен 12, 10:25    [13138386]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
daraemon
Member

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

нет, наоборот не надо, надо только дублированные строки у одного id
10 сен 12, 10:25    [13138388]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
select t1.id, t2.num from t1 join t2 on t2.id = t1.id and t2.num = t1.num
union all
select t2.id, t2.num from t1 join t2 on t2.id = t1.id and t2.num = t1.num
10 сен 12, 10:25    [13138389]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
daraemon
Member

Откуда:
Сообщений: 22
Guf, vanezy мне правильно посоветовал, спасибо ему, сейчас я так и пытаюсь сделать, подзапрос написал, работает как надо, теперь в нужный мне вид привожу(что бы несколько сразу выводилось) и вот тут проблемы
10 сен 12, 10:29    [13138420]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 647
daraemon,
Если версия сервера позволяет, то
;WITH [big_query] ([id], [num])
AS (
----- Вместо этого Ваш большой запрос
              SELECT 1 [id], 890 AS [num]
    UNION ALL SELECT 1 [id], 789 AS [num]
    UNION ALL SELECT 1 [id], 900 AS [num]
    UNION ALL SELECT 2 [id], 300 AS [num]
    UNION ALL SELECT 2 [id], 300 AS [num]
    UNION ALL SELECT 2 [id], 456 AS [num]
    UNION ALL SELECT 3 [id], 789 AS [num]
    UNION ALL SELECT 4 [id], 590 AS [num]
    UNION ALL SELECT 4 [id], 789 AS [num]
    UNION ALL SELECT 4 [id], 789 AS [num]
   )
, [group] ([id], [num])
AS (
    SELECT [b].[id], [b].[num]
        FROM [big_query] [b]
        GROUP BY [b].[id], [b].[num]
        HAVING COUNT(*) > 1
   )
SELECT [b].[id], [b].[num]
    FROM [big_query] [b]
         INNER JOIN [group] [g] ON [g].[id]  = [b].[id]
                               AND [g].[num] = [b].[num]

Иначе меняте WITH на временные таблицы
10 сен 12, 10:38    [13138490]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
daraemon
alexeyvg,

нет, наоборот не надо, надо только дублированные строки у одного id
Почему тогда вы написали, что 3, 789 нужно включить в результат?

Там у вас нету других строк с значениями 3, 789

Тогда запрос Glory правильный:
select id, num 
from cap
group by num, id having count(1) > 1
10 сен 12, 11:16    [13138800]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
daraemon
Member

Откуда:
Сообщений: 22
alexeyvg, да я сам запутался когда писал, да правильный за исключение min(num), эту проблему я решил..
10 сен 12, 11:41    [13139030]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
daraemon
Member

Откуда:
Сообщений: 22
alexeyvg, да я сам запутался когда писал, да правильный за исключение min(num), эту проблему я решил..
10 сен 12, 12:13    [13139281]     Ответить | Цитировать Сообщить модератору
 Re: помогите написать запрос  [new]
CountOver
Guest
daraemon,
select id,num
  from(select id,num,count(1)over(partition by num)cnt
         from Tbl)a
 where a.cnt>1
     
10 сен 12, 12:17    [13139306]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить