循环变量通过表值函数

时间:2014-05-14 19:47:56

标签: sql sql-server tsql loops

我创建了一个表值函数,可以通过这种方式调用它来提供结果:

Select @DateId as DateId,*
From dbo.PastDueARcalc(@DateId)
Where PastDueAR <> 0
and CustomerId in (16629, 9969, 19809)

导致类似这样的事情:

DateId      customerid  IDNId       AccountTypeId RegionId    BusinessUnitId PastDueAR
----------- ----------- ----------- ------------- ----------- -------------- ----------           
41657       16629       2949        1             3           2              7418.97
41657       9969        8233        1             5           3              5188.47
41657       19809       9522        1             5           7              15.82
...

到目前为止,这么好......现在这里是踢球者。 我正在尝试构建一个SSRS图表,它会给我SUM(PastDueAR)。所有其他字段都是报告的参数过滤器

但是正如你所看到的,我只有一天的数据。这就是我从函数中得到的全部内容。

我需要循环遍历函数,并使用用户选择的参数@StartDate和@EndDate中的所有值。并将所有这些结合在一起。 最终,报告可以具有值= SUM(PastDueAR)和groups = DateId

1 个答案:

答案 0 :(得分:0)

您需要以某种方式生成您感兴趣的所有日期的列表,然后针对您的表值函数生成CROSS APPLY

例如(根据您的用例细节进行调整):

DECLARE @dates TABLE (dt datetime)

-- you can get the dates into the table in any way that is most appropriate...
INSERT INTO @dates (dt) VALUES ('1/1/2014')
INSERT INTO @dates (dt) VALUES ('1/2/2014')
INSERT INTO @dates (dt) VALUES ('1/3/2014')

SELECT SUM(pdar.PastDueAR) AS PastDueAR_Total
FROM @dates dates
    CROSS APPLY dbo.PastDueARcalc(dates.dt) pdar
WHERE pdar.PastDueAR <> 0
AND CustomerId in (16629, 9969, 19809)