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

如何有效地将行转换为SQL Server中的列?

DDD
发布: 2025-01-25 14:42:14
原创
660 人浏览过

How Can I Efficiently Convert Rows to Columns in SQL Server?

SQL Server中高效的行转列转换方法

在SQL Server中,将行转换为列有多种方法。

使用PIVOT函数

PIVOT函数可以将数据从行转置为列。 以下是一个使用PIVOT的查询示例:

<code class="language-sql">select Firstname, Amount, PostalCode, LastName, AccountNumber
from
(
  select value, columnname
  from yourtable
) d
pivot
(
  max(value)
  for columnname in (Firstname, Amount, PostalCode, LastName, AccountNumber)
) piv;</code>
登录后复制

此查询将输出以下结果:

FirstName Amount PostalCode LastName AccountNumber
John 2.4 ZH1E4A Fork 857685

请注意,对于大型数据集,PIVOT函数的效率可能较低。

使用聚合函数和CASE表达式

如果PIVOT不适用,可以使用聚合函数和CASE表达式,如下所示:

<code class="language-sql">select
  max(case when columnname = 'FirstName' then value end) Firstname,
  max(case when columnname = 'Amount' then value end) Amount,
  max(case when columnname = 'PostalCode' then value end) PostalCode,
  max(case when columnname = 'LastName' then value end) LastName,
  max(case when columnname = 'AccountNumber' then value end) AccountNumber
from yourtable</code>
登录后复制

此查询将产生与PIVOT查询相同的结果。

使用多个JOIN连接

另一种方法是使用多个JOIN连接,如下所示:

<code class="language-sql">select fn.value as FirstName,
  a.value as Amount,
  pc.value as PostalCode,
  ln.value as LastName,
  an.value as AccountNumber
from yourtable fn
left join yourtable a
  on fn.somecol = a.somecol
  and a.columnname = 'Amount'
left join yourtable pc
  on fn.somecol = pc.somecol
  and pc.columnname = 'PostalCode'
left join yourtable ln
  on fn.somecol = ln.somecol
  and ln.columnname = 'LastName'
left join yourtable an
  on fn.somecol = an.somecol
  and an.columnname = 'AccountNumber'
where fn.columnname = 'Firstname'</code>
登录后复制

请注意,对于大型数据集,使用多个JOIN连接的效率可能不高。 选择哪种方法取决于您的具体数据和性能要求。

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

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