ssrs数据集只显示1行

时间:2017-06-12 16:15:51

标签: 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(
    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

我添加了一个参数来获取此数据集中的可用值,但它确实显示了第一行05/29/2017 - 06/04/2017。我做错了什么以及如何从查询中获取10行?

1 个答案:

答案 0 :(得分:3)

您的查询返回10个结果集,SSRS只会使用第一个结果集。我将跳过如何纠正您的查询,并直接采取正确的方式,您根本不需要循环。使用table value constructor在SQL Server中生成10个数字(0-9)的列表非常简单:

SELECT Number
FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS t (Number);

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

 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行,那么仍然有比循环更好的方法。请参阅以下系列以进一步阅读: