2015-08-14 2 views
-1

В таблице называется USERACCOUNT, записи, как указано ниже,Объединить несколько строк в одну строку в sql-запросе?

User Name | Gmail | Yahoo | Hotmail 
Sankar  | X  | NULL | NULL 
Aravinth | NULL | X  | NULL 
Pavithran | NULL | NULL | X 

Мой освобожденный результат:

User Name | Gmail | Yahoo | Hotmail 
Sankar  | X  | X  | X 

Пожалуйста, помогите мне по этому поводу, Спасибо заранее

+0

Mysql или SQLServer? –

+0

Вопрос не ясен, что было бы результатом для пользователя Aravinth и pavithrana –

ответ

0

вы должны проверьте каждую колонку NULL или нет с помощью ISNULL

declare @temp table 
(
name nvarchar(11), 
gmail nvarchar(11), 
yahoo nvarchar(11), 
hotmail nvarchar(11)) 

insert into @temp values ('snkar' ,'X' , NULL, NULL) 
insert into @temp values ('avinth' ,NULL, 'Y' , NULL) 
insert into @temp values ('vithran',NULL,NULL ,'Z' ) 

select * from @temp 

select 
name,isnull(gmail,isnull(yahoo,hotmail)) gmail, 
isnull(yahoo,isnull(gmail,hotmail)) yahoo, 
isnull(hotmail,isnull(gmail,yahoo)) hotmail  
from @temp 

, и если у нас есть несколько строк с таким же именем, как и что мы должны фильтровать данные такие же, как тогда этот метод будет полезен

insert into @temp values ('snkar' ,'X' , NULL, NULL) 
insert into @temp values ('snkar' ,NULL, 'X' , NULL) 
insert into @temp values ('snkar',NULL,NULL ,'X' ) 

select name,max(gmail) gmail,max(yahoo) yahoo,max(hotmail) hotmail 
from @temp 
group by name 
+0

@SankarRamalingam, пожалуйста, поставите вторую проблему также в Q, чтобы она была полезной для будущего будущего пользователя – wiretext

0

COALESCE больше подходит

DECLARE @temp TABLE 
(
    name nvarchar(11), 
    gmail nvarchar(11), 
    yahoo nvarchar(11), 
    hotmail nvarchar(11) 
) 

INSERT INTO @temp VALUES ('snkar' ,'X' , NULL, NULL) 
INSERT INTO @temp VALUES ('avinth' ,NULL, 'Y' , NULL) 
INSERT INTO @temp VALUES ('vithran',NULL,NULL ,'Z' ) 

SELECT * 
FROM @temp 

SELECT 
name, COALESCE(gmail,yahoo,hotmail) gmail, 
COALESCE(yahoo,gmail,hotmail) yahoo, 
COALESCE(hotmail,gmail,yahoo) hotmail  
FROM @temp 
Смежные вопросы