sql-server - 如何将动态查询列写入 SQL Server 中的行?
问题描述
我在 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 中完成此任务吗?
解决方案
使用交叉应用:
create table emp (empid int, addr varchar(10), sal int, doj datetime)
insert into emp (empid, addr, sal, doj)
values (1, 'hyd', '10', '10-01-1990'),
(2, 'del', '20', '12-03-1999'),
(1, 'pune', '50', '12-03-2017');
select empid,empvalues from emp
cross apply (values (cast (addr as varchar(10)))
,(cast (sal as varchar(10)))
,(Format(doj,'MM-dd-yyyy'))) d(empvalues)
结果:
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
更多信息请查看以下文章:
推荐阅读
- fluentd - fluentd 加载自定义解析器失败
- kotlin - 由于ripple-lib-java 未维护,您如何手动签署交易?
- go - ld.exe:当我尝试编译 go-scrap 时找不到 -lscrap_sys
- c# - Azure ServiceBus:等到所有订阅者都处理完一条消息
- flutter - Flutter 导航,重新打开页面而不是再次推送
- r - 修剪意味着 R 中的方差分析
- javascript - Letting users generate XML product feed through my website
- python - 在调试python代码期间,我们如何查看python类中变量的值
- c++ - 使用相同的 unique_ptr 执行两次 std::move
- flutter - animationController.forward() 中的 'from' 参数究竟在颤动中做了什么?