Sql ssrs数据集仅显示1行

Sql ssrs数据集仅显示1行,sql,sql-server,reporting-services,Sql,Sql Server,Reporting Services,我需要添加一个参数,以便选择从周一到周日的范围。我用以下代码创建了一个数据集 DECLARE @W int SET @W = 0 WHILE @W < 10 BEGIN SELECT CONVERT(VARCHAR(25),DATEADD(wk, DATEDIFF(wk, 6, GETDATE() -7*@W), 0), 101) +' - ' + CONVERT

我需要添加一个参数,以便选择从周一到周日的范围。我用以下代码创建了一个数据集

DECLARE @W int
SET @W = 0
WHILE @W < 10
BEGIN

  SELECT
    CONVERT(VARCHAR(25),DATEADD(wk, DATEDIFF(wk, 6, GETDATE() -7*@W), 0),
    101)                                                      +' - ' + CONVERT(
    VARCHAR(25),DATEADD(wk, DATEDIFF(wk, 6, GETDATE()         -7*@W), 6),
    101) Dte,
    CONVERT(DATE,DATEADD(WEEK,-1*@W,DATEADD(DAY , 1-DATEPART(WEEKDAY,
    GETDATE()),GETDATE()))) "Sunday"
   SET @W = @W +1

END
声明@W int
设置为@W=0
而@W<10
开始
挑选
转换(VARCHAR(25),DATEADD(wk,DATEDIFF(wk,6,GETDATE()-7*@W),0),
101)+'-'+转换(
VARCHAR(25),DATEADD(wk,DATEDIFF(wk,6,GETDATE()-7*@W),6),
101)Dte,
转换日期,日期添加(周,-1*@W,日期添加(天,1-DATEPART,工作日,
GETDATE()),GETDATE())“星期日”
设置@W=@W+1
结束

我添加了一个参数以从该数据集中获取可用值,但它只显示了2017年5月29日至2017年6月4日的第一行。我做错了什么?如何从查询中获取10行?

您的查询返回10个结果集,SSRS将只使用第一个结果集。我将跳过如何更正您的查询,直接转到正确的方法,您根本不需要循环。使用以下命令在SQL Server中生成一个包含10个数字(0-9)的列表是相当简单的:

使用此数字表,您可以生成完整的数据集:

 SELECT
        CONVERT(VARCHAR(25),DATEADD(wk, DATEDIFF(wk, 6, GETDATE())-7*t.Number, 0), 101) +' - ' + 
        CONVERT(VARCHAR(25),DATEADD(wk, DATEDIFF(wk, 6, GETDATE())-7*t.Number, 6),101) Dte,
        CONVERT(DATE,DATEADD(WEEK,-1*t.Number,DATEADD(DAY , 1-DATEPART(WEEKDAY,GETDATE()),GETDATE()))) "Sunday"
FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS t (Number);
如果需要超过10行,那么还有比循环更好的方法。请参阅以下系列以了解更多信息:


您的查询返回10个结果集,SSR将只使用第一个结果集。我将跳过如何更正您的查询,直接转到正确的方法,您根本不需要循环。使用以下命令在SQL Server中生成一个包含10个数字(0-9)的列表是相当简单的:

使用此数字表,您可以生成完整的数据集:

 SELECT
        CONVERT(VARCHAR(25),DATEADD(wk, DATEDIFF(wk, 6, GETDATE())-7*t.Number, 0), 101) +' - ' + 
        CONVERT(VARCHAR(25),DATEADD(wk, DATEDIFF(wk, 6, GETDATE())-7*t.Number, 6),101) Dte,
        CONVERT(DATE,DATEADD(WEEK,-1*t.Number,DATEADD(DAY , 1-DATEPART(WEEKDAY,GETDATE()),GETDATE()))) "Sunday"
FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS t (Number);
如果需要超过10行,那么还有比循环更好的方法。请参阅以下系列以了解更多信息: