SQL选择多个列合并为1

SQL选择多个列合并为1,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我不想连接任何内容。相反,如果一个表有多列,我需要一个SELECT语句,它将返回这些列中的每一列,就像它们存在于不同的行中一样(一列)。例如 TABLE +--------+---------+---------+ +--------+ |Person1 | Person2 | Person3 | |Person | +=======

我不想连接任何内容。相反,如果一个表有多列,我需要一个
SELECT
语句,它将返回这些列中的每一列,就像它们存在于不同的行中一样(一列)。例如

TABLE +--------+---------+---------+ +--------+ |Person1 | Person2 | Person3 | |Person | +========+=========+=========+ SELECT *ANSWER HERE* +========+ |Alex | Ben | Charlie | FROM PEOPLE |Alex | +--------+---------+---------+ ORDER BY *person*? +--------+ |Dale | Eric | Gary | |Ben | +--------+---------+---------+ RETURNS ------------> +--------+ |Charlie | ^^^ NOTE ABOVE HOW WE ^^^ +--------+ HAVE THREE COLUMNS |Dale | +--------+ |Eric | NOTE HOW WE ONLY +--------+ RETURN ONE COLUMN --------------> |Gary | +--------+ 桌子 +--------+---------+---------+ +--------+ |人1 |人2 |人3 |人| +=======================================================+选择*此处回答*+========+ |亚历克斯|本|查理|来自《人物》|亚历克斯| +--------+---------+---------+由*人*订购+--------+ |戴尔|埃里克|加里|本| +--------+---------+---------+返回---------------->+--------+ |查理| ^^^请注意上面我们如何^^^+--------+ 有三根柱子|戴尔| +--------+ |埃里克| 请注意,我们只是+--------+ 返回一列----------------->Gary| +--------+
注意:我们从一个有三列的表开始,现在返回一个结果,就好像每一行都是独立的一样。

您可以使用UNPIVOT,但UNION也可以使用。。更改为“联合所有”以包含重复项

SELECT  Person1 [Person]
FROM    People
UNION
SELECT  Person2
FROM    People
UNION
SELECT  Person3
FROM    People
如果您想尝试UNPIVOT来比较性能,它将如下所示

SELECT DISTINCT
        Person
FROM    People 
UNPIVOT ( 
    Person 
    FOR Persons IN ([Person1],[Person2],[Person3]) 
) up
使用表值构造函数

SELECT DISTINCT
        Person
FROM    People
        CROSS APPLY (VALUES(Person1),(Person2),(Person3)) t(Person)

如果一个值出现多次(例如,“Bob”出现在第1行和第2行,和/或第1列和第2列),它是否应该在最终集合中出现多次?不,但我假设我可以进行分组或类似操作。出于好奇,有什么简单的方法可以缩短上面的查询吗?@Stephenasky我想你可以用一个表值构造函数来缩短它