当列是字符串数据类型时,使用mssql中的"Pivot"将行转换为列

Siv*_*ith 8 sql sql-server pivot

我需要知道,如果没有要使用的聚合函数,MS SQL中的"pivot"是否可用于将行转换为列.我看到很多只有聚合函数的例子.我的字段是字符串数据类型,我需要将此行数据转换为列数据.这就是我写这个问题的原因.我只是用'case'做了.任何人都可以帮助我......提前致谢.

Tar*_*ryn 15

您可以使用PIVOT执行此操作.在执行PIVOT时,您可以使用以下两种方法之一:使用Static Pivot编写要转换的行,或使用Dynamic Pivot在运行时创建列列表:

Static Pivot(参见SQL小提琴演示):

SELECT *
FROM
(
  select empid, wagecode, amount
  from t1
) x
pivot
(
  sum(amount)
  for wagecode in ([basic], [TA], [DA])
) p
Run Code Online (Sandbox Code Playgroud)

动态枢轴:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(wagecode) 
                  FROM t1 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT empid, ' + @cols + ' from 
             (
                 select empid, wagecode, amount
                 from t1
            ) x
            pivot 
            (
                sum(amount)
                for wagecode in (' + @cols + ')
            ) p '

execute(@query)
Run Code Online (Sandbox Code Playgroud)

这两个都会给你相同的结果