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

Откуда:
Сообщений: 6
Добрый день.
Нашел массу похожих решений для моего случая, но то ли это все было немного не то, то ли банально не хватает знаний для применения. Поэтому очень прошу помочь, для профи моя проблема очевидно таковой не будет.

Есть запрос на выборку из двух таблиц по одному столбцу необходимых данных (имя сервера, IP), результат выглядит подобным образом:

name0 IP_address0
msk01sc02 192.168.0.5
msk01test01 192.168.0.152
msk01lot01 192.168.0.56
msk01lot01 192.168.0.58

nsk03fs01 192.168.57.17
rnd01sc01 192.168.65.5

Соответственно, очевидно у сервера msk01lot01 обнаружено 2 сетевых интерфейса, поэтому он дважды указан в отчете, т.к. второе поле уникально. Необходимо удалить одну из строк с ним, при этом не важно какой IP останется. Помогите, пожалуйста.

Далее сам запрос (без деталей фильтрации):

Select distinct sys.name0, IPADDR.IP_Addresses0
from v_R_System SYS
JOIN v_RA_System_IPAddresses IPADDR ON IPADDR.ResourceID=Sys.ResourceID
...
ORDER BY sys.name0

Заранее благодарю за помощь!
23 янв 13, 11:58    [13814248]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
hohot
Необходимо удалить одну из строк с ним, при этом не важно какой IP останется.
Вам физически удалить или чтобы в выборке не присутствовало? И версия сервера какая?
23 янв 13, 13:28    [13815023]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
hohot
Member

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

Нет, только чтобы в отчете не отображались в итоговом.
Прошу прощения, что не указал сервер, исправляюсь: база - SQL 2012 Ent, запрос делаю посредством Report Builder 3.0.
23 янв 13, 14:33    [13815528]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
aleks2
Guest
select name0, min(IP_address0) as IP_address0 from [Есть запрос на выборку из двух таблиц] group by name0
23 янв 13, 14:35    [13815563]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
;with tab as(
   select 
         ROW_NUMBER() over(PARTITION BY name0 order by IP_address0) rn,
         myTable.* 
      from (values
         ('msk01sc02','192.168.0.5'),('msk01test01','192.168.0.152'),('msk01lot01','192.168.0.56'),
         ('msk01lot01','192.168.0.58'),('nsk03fs01','192.168.57.17'),('rnd01sc01','192.168.65.5')
      )myTable(name0,IP_address0))
select *
--delete t
from tab t where rn>1
23 янв 13, 14:50    [13815686]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Cygapb-007
;with tab as(
   select 
         ROW_NUMBER() over(PARTITION BY name0 order by IP_address0) rn,
         myTable.* 
      from (values
         ('msk01sc02','192.168.0.5'),('msk01test01','192.168.0.152'),('msk01lot01','192.168.0.56'),
         ('msk01lot01','192.168.0.58'),('nsk03fs01','192.168.57.17'),('rnd01sc01','192.168.65.5')
      )myTable(name0,IP_address0))
select *
--delete t
from tab t where rn=1
Надо ведь только одну запись для каждого name0
23 янв 13, 14:53    [13815713]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
вопрос был как удалить в таблице:)
если нужна выборка для построения отчта - тогда, конечно, where rn=1
23 янв 13, 14:57    [13815742]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
hohot
Member

Откуда:
Сообщений: 6
Cygapb-007,

Спасибо, однако можете уточнить несколько моментов? В этом обобщенном табличном выражении myTable - это исходная таблица? Если да, то как быть если исходных таблиц две как в моем случае?
И когда мы дергаем в эту обобщенную таблицу не конкретные values а все содержимое обоих столбцов мы просто оставляем такой кусок?

select
ROW_NUMBER() over(PARTITION BY name0 order by IP_address0) rn,
myTable.*
from myTable(name0,IP_address0)

Благодарю за помощь!
23 янв 13, 15:23    [13815980]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
hohot,
FROM
(
 SELECT name0, IP_Addresses0 FROM T1 WHERE ....
 UNION ALL
 SELECT name0, IP_Addresses0 FROM T2 WHERE ....
) myTable
23 янв 13, 15:30    [13816057]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
hohot,

так Вам проще?

select x.name0, x.IP_Addresses0 from
(
Select sys.name0, IPADDR.IP_Addresses0, row_number() over (partition by sys.name0 order by IPADDR.IP_Addresses0) as rn
from v_R_System SYS
join v_RA_System_IPAddresses IPADDR ON IPADDR.ResourceID = Sys.ResourceID
) x
where x.rn = 1
order by x.name0
23 янв 13, 15:31    [13816063]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Select 
   ROW_NUMBER() over(PARTITION BY sys.name0 order by IPADDR.IP_Addresses0) rn,
   sys.name0, 
   IPADDR.IP_Addresses0
from v_R_System SYS 
JOIN v_RA_System_IPAddresses IPADDR ON IPADDR.ResourceID=Sys.ResourceID
where rn=1
ORDER BY sys.name0
или, если лишнее поле повредит отчету,
;with sel as (
   Select 
      ROW_NUMBER() over(PARTITION BY sys.name0 order by IPADDR.IP_Addresses0) rn,
      sys.name0, 
      IPADDR.IP_Addresses0
   from v_R_System SYS 
   JOIN v_RA_System_IPAddresses IPADDR ON IPADDR.ResourceID=Sys.ResourceID
   ORDER BY sys.name0
   )
select name0, IP_Addresses0
from sel
where rn=1
(насчет ORDER BY - не уверен, может снаружи надо)
23 янв 13, 15:34    [13816103]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дубликатов в столбце (при том, что разные строки)  [new]
hohot
Member

Откуда:
Сообщений: 6
PaulYoung,
aleks2,
iap,
Cygapb-007,

Всем спасибо огромное, разжевали в деталях.
23 янв 13, 16:16    [13816579]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить