我需要添加一个参数才能选择星期一到星期日的范围。我用以下代码制作了一个数据集
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行?
答案 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行,那么仍然有比循环更好的方法。请参阅以下系列以进一步阅读: