2017-09-25 87 views
0

我想为我的参数显示月份和年份,供最终用户从下拉列表中进行选择。SQL Server中参数的月份和年份的下拉列表

例如,开始日期必须在6月2017年结束日期只有一个月,一年getdate()

这是我写的查询,但它不是为我工作

declare @start datetime = '6/1/2017' 
declare @end datetime = getdate() 

select 
    @start = dateadd(M, @start), 
    datename(M, @start) + ' ' + datename(Y, @start) 
where 
    @start < @end 
+0

这是什么代码?在SSRS的某个地方? – SEarle1986

+0

你希望从这个查询中看到什么输出? –

+0

代码在sql server中。我想看到的输出是月和年的下拉列表。例如2017年6月,2017年7月,2017年8月....从getdate() – Chairbedding

回答

0

有一些错误在你的代码:

  1. 的DATEADD语法,正确dateadd(MONTH,1, @start)
  2. 您returnin克错误A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.

尝试这些代码

DECLARE @start DATETIME = '2017-01-01' 
DECLARE @end DATETIME = Getdate(); 

WITH ctealldates 
    AS (SELECT @start startdate 
       ,@end enddate 
     FROM (VALUES (1))G(n) 
     UNION ALL 
     SELECT Dateadd(month, 1, startdate) startdate 
       ,enddate 
     FROM ctealldates 
     WHERE startdate < enddate) 
SELECT Datename(month, startdate) + ' ' 
       + Datename(year, startdate) MonthName, year(startdate) * 100 + month(startdate) OrderBy 
FROM ctealldates 
ORDER BY 
    year(startdate) * 100 + month(startdate) 
OPTION (maxrecursion 0); 



MonthName              OrderBy 
------------------------------------------------------------- ----------- 
January 2017             201701 
February 2017             201702 
March 2017             201703 
April 2017             201704 
May 2017              201705 
June 2017              201706 
July 2017              201707 
August 2017             201708 
September 2017            201709 
+0

到月份和年份没有问题。请将 dateadd(day,1,startdate)startdate更改为Dateadd(month,1,startdate)startdate,它会提高性能并删除disitinct。 –

0

一个解决方案,我认为将是如下。

  1. 创建一个存储过程,如下

    declare @start DATE = '2011-05-01' 
    declare @end DATE = getdate() 
    ;with months (date) 
    AS 
    (
        SELECT @start 
        UNION ALL 
        SELECT DATEADD(month,1,date) 
        from months 
        where DATEADD(month,1,date)<[email protected] 
    ) 
    select Datename(month,date) As Months, Datename(year, date) As Years, CONCAT(Datename(month,date), ' ', Datename(year, date)) As MonthandYear from months 
    
  2. 创建报表RDL参数,以及可用值选项,可以选择从查询中获取值。

enter image description here 选择创建数据集从上面的查询,在值字段中选择MonthandYear字段和标签为“开始日期”。

当您运行报告时,您应该接收输入参数作为开始日期,并以开始日期和结束日期的日期差异值作为下拉值。

希望这有助于。

+0

非常感谢您的帮助。您的查询是正确的。 – Chairbedding