首页 > 数据库 > mysql教程 > 如何高效地将SQL Server表列转换为行?

如何高效地将SQL Server表列转换为行?

Linda Hamilton
发布: 2025-01-21 19:17:13
原创
242 人浏览过

How to Efficiently Convert SQL Server Table Columns into Rows?

将SQL Server表列转换为行

将表列转换为行是一种非常有用的数据处理技巧。本文介绍了几种在SQL Server中完成此任务的方法。

UNPIVOT函数

UNPIVOT函数明确地将列转换为行,从而实现灵活的数据重组。例如,要转换示例表模式中'Indicator1'到'Indicator150'列:

<code class="language-sql">select id, entityId,
  indicatorname,
  indicatorvalue
from yourtable
unpivot
(
  indicatorvalue
  for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;</code>
登录后复制

使用CROSS APPLY和UNION ALL

或者,可以使用CROSS APPLY和UNION ALL组合多个子查询:

<code class="language-sql">select id, entityid,
  indicatorname,
  indicatorvalue
from yourtable
cross apply
(
  select 'Indicator1', Indicator1 union all
  select 'Indicator2', Indicator2 union all
  select 'Indicator3', Indicator3 union all
  select 'Indicator4', Indicator4 
) c (indicatorname, indicatorvalue);</code>
登录后复制

使用CROSS APPLY和VALUES子句

在支持的SQL Server版本中,可以使用CROSS APPLY和VALUES子句:

<code class="language-sql">select id, entityid,
  indicatorname,
  indicatorvalue
from yourtable
cross apply
(
  values
  ('Indicator1', Indicator1),
  ('Indicator2', Indicator2),
  ('Indicator3', Indicator3),
  ('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);</code>
登录后复制

针对大量列的动态SQL

对于需要解旋的大量列的表,请考虑使用动态SQL以编程方式生成查询:

<code class="language-sql">DECLARE @colsUnpivot AS NVARCHAR(MAX),
   @query  AS NVARCHAR(MAX)

select @colsUnpivot 
  = stuff((select ','+quotename(C.column_name)
           from information_schema.columns as C
           where C.table_name = 'yourtable' and
                 C.column_name like 'Indicator%'
           for xml path('')), 1, 1, '')

set @query 
  = 'select id, entityId,
        indicatorname,
        indicatorvalue
     from yourtable
     unpivot
     (
        indicatorvalue
        for indicatorname in ('+ @colsunpivot +')
     ) u'

exec sp_executesql @query;</code>
登录后复制

以上是如何高效地将SQL Server表列转换为行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板