开发者社区> 问答> 正文

如何在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中完成此任务?

展开
收起
Puppet 2020-01-03 11:12:04 475 0
1 条回答
写回答
取消 提交回答
  • 您可以像这样尝试使用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

    2020-01-03 11:12:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载