我在SQL Server中有一个问题:如何在查询中将4列合并为1列。
表: emp
empid | addr | sal | doj
------+------+-----+------------
1 | hyd | 10 | 10-01-1990
2 | del | 20 | 12-03-1999
1 | pune | 50 | 12-03-2017
基于上面的数据,我想像下面这样输出
empid | empvalues
------+---------------
1 | hyd
1 | 10
1 | 10-01-1990
2 | del
2 | 20
2 | 12-03-1999
1 | pune
1 | 50
1 | 12-03-2017
我试过这样的查询:
select
empid, cast (addr as varchar(100)) as empvalues
from emp
union all
select empid, cast (sal as varchar(100)) as empvalues
from emp
union all
select empid, cast (doj as varchar(100)) as empvalues
from emp
此查询返回正确的结果,但是由于调用同一张表3次,因此花费大量时间。
您能否告诉我如何编写替代查询以在SQL Server中完成此任务?
您可以像这样尝试使用UNPIVOT ...
SELECT empid, empvalues
FROM (
select empid, addr, convert(varchar(100), sal) as sal, convert(varchar(100), doj, 103) as doj
from emp
) pv
UNPIVOT
(
empvalues
FOR ev in (addr, sal, doj)
) AS ev
产生这个输出...
sql结果
供您参考的资源...
https://codingsight.com/understanding-pivot-unpivot-and-reverse-pivot-statements/ https://docs.microsoft.com/zh-cn/sql/t-sql/queries/from-using-pivot- and-unpivot?view = sql-server-ver15
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。