示例数据 -
CREATE TABLE dbo.#test
(
id int NOT NULL,
name varchar (10) NULL,
name2 varchar (10) null
);
insert into #test values ('1','abc','abc')
insert into #test values ('1','abc','yyy')
insert into #test values ('1','abc','zzz')
insert into #test values ('1','abc','ddd')
select * from #test
现在,我正试图加入/合并专栏' name'和' name2'然后删除重复项并显示如下值 - 任何想法?
Name
abc
ddd
yyy
zzz
我需要使用CASE语句完成此操作,即示例代码如下所示。 (虽然这可以通过使用UNION来实现,但我需要使用CASE语句)
select case 'b'
when 'a'
then name
when 'b'
then coalesce (name , name2 )
end as NAME from #test
答案 0 :(得分:2)
这很糟糕,应该使用UNION来完成,但我认为这是你在这个例子中所追求的: -
select
case
when (select count(*) from #test b where b.name = a.name2) > 1 then a.name
else a.name2
end as Name
from #test a
实际上,你应该有这样的东西: -
select name from #test
union
select name2 from #test
答案 1 :(得分:0)
获得所需结果的方法之一是使用Union
另一种替代方式是 -
SELECT id
,(
SELECT max(name1)
FROM (
VALUES (name)
,(name2)
) res(name1)
) AS name
FROM #test
<强>结果强>
id Name
--------
1 abc
1 ddd
1 yyy
1 zzz