首页 > 代码库 > T-SQL 实现行转列
T-SQL 实现行转列
问题:
我正在寻找一种有效的方式将行转换为SQL服务器中的列
例如,通过下表如何构建出预期结果表。
Id Value ColumnName
1 John FirstName
2 2.4 Amount
3 ZH1E4A PostalCode
4 Fork LastName
5 857685 AccountNumber
预期结果
FirstName Amount PostalCode LastName AccountNumber
John 2.4 ZH1E4A Fork 857685
解答:
有多种方法可以将数据从多行转换为列。 在SQL Server中,可以使用PIVOT函数将数据从行转换为列:
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;
如果您有未知数目的列名称要转置,那么您可以使用动态SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ‘,‘ + QUOTENAME(ColumnName)
from yourtable
group by ColumnName, id
order by id
FOR XML PATH(‘‘), TYPE
).value(‘.‘, ‘NVARCHAR(MAX)‘)
,1,1,‘‘)
set @query = N‘SELECT ‘ + @cols + N‘ from
(
select value, ColumnName
from yourtable
) x
pivot
(
max(value)
for ColumnName in (‘ + @cols + N‘)
) p ‘
exec sp_executesql @query;
如果不想使用PIVOT函数,则可以使用带有CASE表达式的聚合函数:
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
T-SQL 实现行转列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。