Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过表值函数循环变量_Sql_Sql Server_Tsql_Loops - Fatal编程技术网

Sql 通过表值函数循环变量

Sql 通过表值函数循环变量,sql,sql-server,tsql,loops,Sql,Sql Server,Tsql,Loops,我创建了一个表值函数,可以通过以下方式调用该函数以提供结果: Select @DateId as DateId,* From dbo.PastDueARcalc(@DateId) Where PastDueAR <> 0 and CustomerId in (16629, 9969, 19809) 到目前为止,一切都很好。。。现在是踢球者。 我正在尝试建立一个SSRS图表,它将为我提供SumpassDuear。所有其他字段都是报表的参数过滤器 但正如你所看到的,我只有一天的数据。这

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

Select @DateId as DateId,*
From dbo.PastDueARcalc(@DateId)
Where PastDueAR <> 0
and CustomerId in (16629, 9969, 19809)
到目前为止,一切都很好。。。现在是踢球者。 我正在尝试建立一个SSRS图表,它将为我提供SumpassDuear。所有其他字段都是报表的参数过滤器

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

我需要使用用户选择的@StartDate和@EndDate参数中的所有值循环函数。把所有这些结合在一起。
最终,报表的值可以是=SUMPastDueAR,而groups=DateId

,您需要以某种方式生成您感兴趣的所有日期的列表,然后交叉应用于表值函数

例如,根据用例的具体情况进行调整:

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)

谢谢你,mwigdahl,这是完美的,它就像我需要的那样工作。
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)