我正在尝试使用具有大量级别的列在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;
答案 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