Попробуйте это
DECLARE @Table TABLE(
ID INT,
NAME VARCHAR(MAX)
)
INSERT INTO @Table (ID,[NAME]) SELECT 1, 'Amit'
INSERT INTO @Table (ID,[NAME]) SELECT 2, 'Mohit'
INSERT INTO @Table (ID,[NAME]) SELECT 2, 'Nahar'
INSERT INTO @Table (ID,[NAME]) SELECT 3, 'C'
INSERT INTO @Table (ID,[NAME]) SELECT 3, 'D'
INSERT INTO @Table (ID,[NAME]) SELECT 3, 'E'
Запрос (для первого запроса)
select id,
REPLACE(stuff((select ',' + ' ' + name + ' '
from @Table b
where b.id = a.id
FOR xml path('')),1,1,' '),',','OR') MergedData
from @Table a
group by a.id
Выход:
id MergedData
1 Amit
2 Mohit OR Nahar
Запрос (для запроса на изменение)
select distinct a.id,
case when coalesce(x.cnt,0) <= 2 then
REPLACE(stuff((select ',' + ' ' + name + ' '
from @Table b
where b.id = a.id
FOR xml path('')),1,1,' '),',','OR')
when x.cnt > 2 then
REPLACE(stuff((select ',' + ' ' + name + ' '
from @Table b
where b.id = a.id
FOR xml path('')),1,1,' '),',','AND')
end
MergedData
from @Table a
left join
(select id,COUNT(id) cnt
from @Table
group by ID
having (COUNT(id)>1))x
on a.ID = x.ID
Выход:
id MergedData
1 Amit
2 Mohit OR Nahar
3 C AND D AND E