2014-08-27 4 views
-2

я создать хранимую процедуру для выбора данных и результат есть:Как проверить повторяющиеся значения столбцов?

ID NAME EMAIL 
1 John [email protected] 
2 Sam [email protected] 
3 Tom [email protected] 
4 Bob [email protected] 
5 Tom [email protected] 

, и я хотел бы получить результат как:

ID NAME EMAIL 
1 John [email protected] 
2 Sam [email protected] 
3 Tom [email protected], [email protected] 
4 Bob [email protected] 

так, как я могу это сделать?

Спасибо.

+0

, что у хочу спросить? – Navneet

+0

Возможный дубликат [Как удалить повторяющиеся строки?] (Http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows) – Oliver

ответ

1
select 
    id, 
    name, 
    email 
from (
    select 
     rn = row_number() over(partition by name order by id asc), 
     id, 
     name, 
     email = stuff((select ', ' + convert(varchar, t2.email) 
         from @table_var t2 
         where t1.name = t2.name 
         for xml path('')) 
        ,1,2,'') 
    from @table_var t1 
    group by t1.id, t1.name 
)t 
where rn = 1 
order by id 
0

Еще один способ, может помочь

;WITH cte 
AS 
(
    SELECT Id 
    ,Name 
    ,Email 
    ,ROW_NUMBER() OVER(PARTITION BY Name,Email ORDER BY Id) AS rowNum 
    FROM Table 
) 
SELECT Id,Name,Email 
FROM cte 
WHERE rowNum=1; 
0

Решение состоит в том:

select distinct e1.Name, 
(case when e2.Email is null then e1.Email else 
(case when e1.Email > e2.Email then e1.Email + ','+ e2.Email else e2.Email + ','+ e1.Email end) 
    end) from MyTable e1 
left join MyTable e2 on e1.Name = e2.Name and e1.Email <> e2.Email 
Смежные вопросы