【问题标题】:Is it possible to use dynamically created values in a SQL PIVOT?是否可以在 SQL PIVOT 中使用动态创建的值?
【发布时间】:2011-05-18 13:51:15
【问题描述】:

我有以下功能:-

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-server pivot


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2014-12-11
    • 1970-01-01
    • 2011-11-09
    • 2018-03-12
    相关资源
    最近更新 更多