我有以下功能: -

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)

  • 等等...

    谢谢。

    最佳答案

    不像你想做的那样。这样做的唯一方法是动态 SQL,您不能在函数中使用动态 SQL。

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

    关于sql - 是否可以在 SQL PIVOT 中使用动态创建的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6045828/

    10-12 19:07