我有这样一个简单的查询..
USE AdventureWorks; GO SELECT DaysToManufacture,AVG(StandardCost) AS AverageCost FROM Production.Product GROUP BY DaysToManufacture; DaysToManufacture AverageCost 0 5.0885 1 223.88 2 359.1082 4 949.4105
一个简单的枢轴给了我
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days,[0],[1],[2],[3],[4] FROM (SELECT DaysToManufacture,StandardCost FROM Production.Product) AS SourceTable PIVOT ( AVG(StandardCost) FOR DaysToManufacture IN ([0],[4]) ) AS PivotTable;
给我
Cost_Sorted_By_Production_Days 0 1 2 3 4 AverageCost 5.0885 223.88 359.1082 NULL 949.4105
但是数据透视查询中的值是硬编码..我想从子查询中获取这些值.
select DaysToManufacture FROM Production.Product GROUP BY DaysToManufacture;
解决方法
不可以.这只能使用动态查询来完成.我真的很想知道是否有办法.
快速Google search发现了一些使用COALESCE创建列列表的示例.但是我更喜欢使用STUFF创建列列表.但是我确实找到了关于使用CTE’s and dynamic pivots的这篇文章,这也可能是一种帮助