一尘不染

当列为字符串数据类型时,使用mssql中的“数据透视表”将行转换为列

sql

我需要知道,如果没有聚合函数要使用,MS
SQL中的“数据透视”是否可以用于将行转换为列。我看到了很多仅带有聚合函数的示例。我的字段是字符串数据类型,我需要将此行数据转换为列数据。这就是为什么我写这个问题。我只是用’case’做到了。谁能帮我......提前感谢。


阅读 178

收藏
2021-03-10

共1个答案

一尘不染

您可以使用PIVOT执行此操作。在执行PIVOT时,可以使用以下两种方法之一进行操作:使用“静态数据透视表”(将对行进行编码)或“动态数据透视表”将在运行时创建列列表:

静态数据透视表(请参阅带有演示的SQL Fiddle):

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

动态枢轴:

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)

两者都会为您带来相同的结果

2021-03-10