2017-09-20 34 views
1

我试图做使用列有很多层次的SQL Server中的支点。目前我正在做一个SQL服务器 - PIVOT使用可变

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

,复制和粘贴输出到文本编辑器。

我想知道是否有可能声明一个变量,以此作为在转动命令的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

这听起来像一个[动态枢轴](https://stackoverflow.com/a/40598475/6167855)。这可能是你想要的吗? [又如](https://stackoverflow.com/a/39513013/6167855) – scsimon

+0

@scsimon:看起来像什么,我需要 - 谢谢! – screechOwl

+0

没有问题@screechOwl – scsimon

回答

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