CTE后的SQL动态数据透视

时间:2014-11-26 17:09:40

标签: sql sql-server dynamic pivot

我希望这更具体一点?抱歉,如果我不清楚,有点新鲜。谢谢你的帮助!!

我试图让动态支点在CTE上工作。我看了一下,我有几个问题。对于我的命运,似乎以下帖子的内容对于动态sql来说是非常标准的:

Pivot Table and Concatenate Columns

我的表格中有以下列,包括交易:

  

日期|产品|时间|价格|卷|

我想获得当天每个季度的平均价格,所以我想在将其四舍五入到最接近的季度时间之后调整时间列。并取每个产品和日期的加权平均价格。

所以我使用一个CTE来创建数据透视表:

DECLARE @pivot_list as varchar(max)

;with startquarter(starttradequarter)
AS
(
SELECT  cast(DATEadd(mi,(datediff(mi,0,Time))/15*15,0)as varchar)
    from [table]
where date > '2014-04-15'
),
PIVOT_CODES(PIVOT_CODE)
AS
(
SELECT DISTINCT starttradequarter AS PIVOT_CODE
                from startquarter
)
SELECT @pivot_list = COALESCE(@pivot_list + ',[' + PIVOT_CODE + ']','[' + PIVOT_CODE + ']')
FROM PIVOT_CODES

然后我想在表的一个轴中使用这个变量:

;With productselector(Date,startquarter,product,volume,price)
as
(
SELECT [Date]
      ,cast(DATEadd(mi,(datediff(mi,0,Time))/15*15,0)as varchar) as startquarter
      ,[product]
      ,[Volume]
      ,[Price]
FROM [table]
where DelDate = '2014-01-06' and product = 'x'
),
WAPricequarter(startquarter,date,sumvolume,WAPq,product)
AS
(
SELECT startquarter 
      ,Date
      ,sum(volume) as sumvolume
      ,round(sum(volume*price)/sum(volume),2) as WAPq
      ,product
      from productselector
      group by date, startquarter, product
)
SELECT date, product, + @pivot_list
from WAPricequarter
PIVOT (
    SUM([sumvolume])
    FOR startquarter IN (@pivot_list)
) AS pvt

所以我在所有动态枢轴中看到第二个语句首先放入变量然后执行,这是必要的吗?

如果不是如何让枢轴工作在@pivot_list中的列上,它现在会出现错误的语法错误,我无法开始工作。

如果有必要将其放入变量然后执行,那么我怎么能在该变量中过滤产品或日期,因为我必须使用''在它周围。

0 个答案:

没有答案