是否可以在SQL PIVOT中使用动态创建的值?

时间:2011-05-18 13:51:16

标签: sql sql-server pivot

我有以下功能: -

ALTER FUNCTION fncTest ()
RETURNS TABLE
AS
  RETURN
    (SELECT *
     FROM   (SELECT TOP 100 PERCENT sOrderType,
                                    SUM(iQty) AS iOrdQty,
                                    ( YEAR(dReqd) * 100 ) + DATEPART(Week, dReqd) AS iWkNo
             FROM   tblOrderBook
             GROUP  BY sOrderType,
                       dOrdered) AS tblTemp PIVOT(SUM(Qty) FOR iWkNo IN 
                        ([201118], [201119], [201120], [201121], [201122])) AS pvtTemp)  

这给了我一张数据透视表,显示了2011年18-22周的订单数量。

是否可以使用基于GETDATE()的动态日期替换硬编码周。

ie:
  • [201118]替换为(YEAR(GETDATE()+7)*100)+DATEPART(week,GETDATE()+7)
  • [200119]替换为(YEAR(GETDATE()+14)*100)+DATEPART(week,GETDATE()+14)
  • [200120]替换为(YEAR(GETDATE()+21)*100)+DATEPART(week,GETDATE()+21)

等...

感谢。

1 个答案:

答案 0 :(得分:5)

不是你想要的。执行此操作的唯一方法是动态SQL,您不能在函数中使用动态SQL。

但您可以使用固定列名称(例如[1],[2],[3]等)来表示相对于当前日期的周数。