合并两列导致一列 - SQL

时间:2015-12-17 21:34:32

标签: sql sql-server database tsql

示例数据 -

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

2 个答案:

答案 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