SQL Server - PIVOT使用变量

时间:2017-09-20 21:03:40

标签: sql sql-server pivot pivot-table

我正在尝试使用具有大量级别的列在SQL Server中执行数据透视。目前我正在做

select '[' + category_1 + '],', count(*) from myTable group by '[' + category_1 + '],'

并将输出复制并粘贴到文本编辑器中。

我想知道是否可以声明变量并将其用作pivot命令中的IN ([],[],[])信息。有没有人能够做到这一点?

我认为它看起来像这样:

@factorLevels = (select '[' + category_1 + '],' from (select category_1, count(*) from myTable) t1)

SELECT * 
FROM
(select category_1, item_count from myTable) as t1
PIVOT
(
SUM(item_count)
FOR category_1 IN (@factorLevels)
) as PivotTable;

1 个答案:

答案 0 :(得分:1)

如果我理解正确,我想我有一个解决方案。您可以使用动态SQL。 您需要设置一个变量,其中包含您想要旋转的字段的所有值,然后将查询本身分配给变量并执行它以获得结果:

DECLARE
    @values VARCHAR(50),
    @querytext VARCHAR(MAX)
;
SET @values = (SELECT '('+(SELECT STUFF(( SELECT ',[' + category_1 +']' FROM 
    <your table> FOR XML PATH('')), 1, 1, '')  )+')')
;

SELECT @querytext = 
'SELECT *
 FROM (
     SELECT
       <your fields>
     FROM
       <your table>
     WHERE
       <your criteria>
     GROUP BY
       <your grouping>
     ) AS Main
PIVOT (
    SUM(item_count)
    FOR [category_1] IN ' + @values + '
    ) AS PivotSum'

EXEC sp_executesql @querytext