Удаление дубликатов в столбце (при том, что разные строки)

hohot
Дата: 23.01.2013 11:58:32
Добрый день.
Нашел массу похожих решений для моего случая, но то ли это все было немного не то, то ли банально не хватает знаний для применения. Поэтому очень прошу помочь, для профи моя проблема очевидно таковой не будет.

Есть запрос на выборку из двух таблиц по одному столбцу необходимых данных (имя сервера, 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

Заранее благодарю за помощь!
PaulYoung
Дата: 23.01.2013 13:28:21
hohot
Необходимо удалить одну из строк с ним, при этом не важно какой IP останется.
Вам физически удалить или чтобы в выборке не присутствовало? И версия сервера какая?
hohot
Дата: 23.01.2013 14:33:22
PaulYoung,

Нет, только чтобы в отчете не отображались в итоговом.
Прошу прощения, что не указал сервер, исправляюсь: база - SQL 2012 Ent, запрос делаю посредством Report Builder 3.0.
aleks2
Дата: 23.01.2013 14:35:57
select name0, min(IP_address0) as IP_address0 from [Есть запрос на выборку из двух таблиц] group by name0
Cygapb-007
Дата: 23.01.2013 14:50:11
;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
iap
Дата: 23.01.2013 14:53:17
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
Cygapb-007
Дата: 23.01.2013 14:57:07
вопрос был как удалить в таблице:)
если нужна выборка для построения отчта - тогда, конечно, where rn=1
hohot
Дата: 23.01.2013 15:23:07
Cygapb-007,

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

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

Благодарю за помощь!
iap
Дата: 23.01.2013 15:30:21
hohot,
FROM
(
 SELECT name0, IP_Addresses0 FROM T1 WHERE ....
 UNION ALL
 SELECT name0, IP_Addresses0 FROM T2 WHERE ....
) myTable
PaulYoung
Дата: 23.01.2013 15:31:01
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