动态PIVOT查询 - 如何在SQL Server中保存?

时间:2017-02-17 08:02:54

标签: sql sql-server

我必须使用以下script在本文中描述的SQL Server中构建动态PIVOT:

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)

--Get distinct values of the PIVOT Column 
SELECT @ColumnName= ISNULL(@ColumnName + ',','') 
       + QUOTENAME(Course)
FROM (SELECT DISTINCT Course FROM #CourseSales) AS Courses

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
  N'SELECT Year, ' + @ColumnName + '
    FROM #CourseSales
    PIVOT(SUM(Earning) 
          FOR Course IN (' + @ColumnName + ')) AS PVTTable'
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery

效果很好,它会按预期返回动态表。

但是,我希望能够在其他查询中选择它,但找不到合适的方法:

  • 视图不起作用,因为它不接受变量
  • 表值函数不起作用,因为我事先并不知道输出表的结构
  • 存储过程不起作用,因为我无法在SELECT查询中使用它

保存此动态数据透视查询并在之后能够选择它的最佳解决方案是什么?

谢谢

西尔

2 个答案:

答案 0 :(得分:0)

您可以尝试使用存储过程,并在该sp中使用动态数据透视查询中的SELECT INTO并存储在临时表(#myDynamicPivot)中。

然后,您可以在下一个选择语句中使用临时表。确保在使用后放下桌子。

修改

我会考虑将创建数据透视表的数据移动到数据仓库并在其上创建分析数据库。通过这种方式,您可以使用维度进行查询,数据将更快,并且将更加优化存储和查询。

答案 1 :(得分:0)

喔。你可以使用临时表,我的朋友。首先,检查临时表的存在。请记住在查询结束时删除它。