我想将两列合并为一列,并希望添加一列以显示两列之间的关系,如下例所示。
示例
这是员工表示例:
表:员工
create table employee
(
name varchar(10),
empid1 varchar(10),
empid2 varchar(10)
);
插入一些记录:
insert into employee values('ax','A101','X101');
insert into employee values('by','B101','Y101');
insert into employee values('cz','C101','Z101');
insert into employee values('dw','D101','W101');
select * from employee;
name empid1 empid2
---------------------
abc A101 X101
by B101 Y101
cz C101 Z101
dw D101 W101
注意:现在我想将empid1
和empid2
合并为一个,并且还想添加一个额外的列来显示两列之间的关系,如下所示结果
预期结果:
name IdType IdValues
-----------------------
abc empid1 A101
by empid1 B101
cz empid1 C101
dw empid1 D101
abc empid2 X101
by empid2 Y101
cz empid2 Z101
dw empid2 W101
答案 0 :(得分:2)
您可以使用UNPIVOT
来实现此目标:
SELECT upvt.Name,
upvt.IDType,
upvt.IDValues
FROM Employee AS e
UNPIVOT
( IDValues
FOR IDType IN ([empid1], [empid2])
) AS upvt
ORDER BY upvt.IDType;
<强> Example on SQL Fiddle 强>
另一种方法是将CROSS APPLY
与Table Value Constructor:
SELECT e.Name,
upvt.IDType,
upvt.IDValues
FROM Employee AS e
CROSS APPLY
(VALUES
('empid1', e.empid1),
('empid2', e.empid2)
) AS upvt (IDType, IDValues)
ORDER BY upvt.IDType;
<强> Example on SQL Fiddle 强>
UNPIVOT
适用于这种情况,但CROSS APPLY
方法更通用,如果您需要取消更多列,或做一些稍微复杂的事情。