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我想你可以用一个表值构造函数来缩短它