【问题标题】:How to run a tabular function multiple times (with different arguments each time)如何多次运行表格函数(每次使用不同的参数)
【发布时间】:2014-10-09 16:47:34
【问题描述】:

我有一个表格函数,我想在其中提取以下内容:

select LastName, 
       FirstName, 
       Location, 
       Sales
from fnGetStuff (DateID)

我想为一堆 DateID 多次运行它,比如 (2001, 2004, 2005, 2011)

有没有办法让表格函数以每个 DateID 作为参数运行多次?

研究它我发现 CROSS APPLY 可能是一个答案,但不确定。

【问题讨论】:

  • 数据库是指 Microsoft SQL Server Management Studio?
  • 是的,CROSS APPLY 就是您想要的。从某个表/子查询中选择 DateIds,然后交叉应用您的函数

标签: sql sql-server function ssms tabular


【解决方案1】:

您可以使用递归CTE 来获取所需的年数,并使用该结果进行交叉应用以获取所有年份的所有数据点。

;with cte(DateID, N)
as
(
  select 2011 as DateID, 1
  union all
  select DateID+1 , N+1
  from CTE
  WHERE N < =2
)
select * from cte
CROSS APPLY
select LastName, 
       FirstName, 
       Location, 
       Sales
from fnGetStuff (cte.DateID)

【讨论】:

  • 所以 SQL Server 2012 似乎不喜欢最后一个 select 语句 - 在 LastName 之前...语法不正确...
  • 在 CROSS APPLY 之后在位周围加上括号似乎有效。如果我想要的不是 2012、2013、2014 而是随机年份(1995、2001、2002、2013),我该怎么办?
  • @Ken,如果您想要随机年份,请将 cte 更改为 ;with cte as ( select 1995 as DateID UNION select 2001 as DateID)
猜你喜欢
  • 2012-02-11
  • 2013-11-29
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
相关资源
最近更新 更多