我的表有以下列:
A | B | C | D | E | F
我想显示如下:
MyColumn | MyColumn2
A | B
C | D
E | F
如您所见,我想将列显示为具有自定义列名的对。这些对是 A 列和 B 列、C 列和 D 列以及 C 和 D 列。
select A as [Col 1], B as [Col 2] from table
union all
select C,D from table
union all
select E,F from table
这不会扩展到十亿列,但是......
Select A as MyColumn, B as MyColumn2 from Table
UNION
Select C as MyColumn, D as MyColumn2 from Table
UNION
Select E as MyColumn, F as MyColumn2 from Table
此查询将删除重复项。所以说表中有一条记录
你好 | 世界 | 你好 | 世界 | 你好 | 世界
我的选择只会返回
你好 | 世界
Sambo's 将返回所有三个...
如果我对您的理解正确,您可以通过工会做到这一点:
SELECT A as MyColumn, B as MyColumn2
UNION
SELECT C as MyColumn, D as MyColumn2
UNION
SELECT E as MyColumn, F as MyColumn2
如果匹配列的数据类型不同,则需要先转换数据类型,例如:
SELECT CONVERT(VARCHAR(10), A) as MyColumn, CONVERT(VARCHAR(10), B) as MyColumn2
UNION
SELECT CONVERT(VARCHAR(10), C) as MyColumn, CONVERT(VARCHAR(10), D) as MyColumn2
UNION
SELECT CONVERT(VARCHAR(10), E) as MyColumn, CONVERT(VARCHAR(10), F) as MyColumn2
在 Sql Server 2005 中,Unpivot 运算符可以解决您的问题。 Unpivot 将列转换为 sql server 2005 中的行。
希望能帮助到你