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

转载于:https://www.cnblogs.com/bi-info/p/6215215.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值