Pivot-SQL-子查询中的值

Pivot-SQL-子查询中的值,sql,pivot,Sql,Pivot,我有一个像这样的简单问题 USE AdventureWorks; GO SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost FROM Production.Product GROUP BY DaysToManufacture; DaysToManufacture AverageCost 0 5.0885 1 223.88 2

我有一个像这样的简单问题

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], [1], [2], [3], [4]) 
) AS PivotTable;  
给我

Cost_Sorted_By_Production_Days   0                     1                     2                     3                     4

AverageCost                    5.0885                223.88                359.1082              NULL                  949.4105
但是pivot查询中的值是硬代码。。我想从子查询中获取这些值

select DaysToManufacture FROM Production.Product GROUP BY DaysToManufacture;

但是pivot不允许我从子查询中获取值,除了编写一个动态生成的查询之外,还有其他方法可以做到这一点吗?

没有。这只能使用动态查询来完成。我也很想知道是否有办法


下面是一些示例,可以使用
COALESCE
创建列列表。但是,我更喜欢使用
STUFF
创建列列表。然而,我确实发现了这篇关于使用动态查询的文章,它可能也有助于从子查询中获取值,我们可以使用动态查询。我做了一些研究并找到了解决办法

DECLARE @query VARCHAR(4000)
DECLARE @days VARCHAR(2000)
SELECT  @days = STUFF(( SELECT DISTINCT
                        '],[' + ltrim(str(DaysToManufacture))
                        FROM    Product
                        ORDER BY '],[' + ltrim(str(DaysToManufacture))
                        FOR XML PATH('')
                        ), 1, 2, '') + ']'

SET @query =
'SELECT ''AverageCost'' AS Cost_Sorted_By_Production_Days,'   +
@days + 
'FROM  (SELECT DaysToManufacture, StandardCost FROM Product) AS SourceTable  
PIVOT  
(  
AVG(StandardCost)  
FOR DaysToManufacture IN (' + @days +  ')) AS PivotTable;'  

EXECUTE (@query)

谢谢

谢谢艾哈迈德。我认为在我的情况下,合并的想法是非常酷的。虽然这不是一个直截了当的答案,但我给你们投赞成票;)