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中文网其他相关文章!