2013-01-03 47 views
0

我有一个基于“结束日期”选择运行的查询。基本上,用户选择结束日期,查询将根据结束日期运行整个YTD的报告。例如,如果我选择“12/3/12”,它应该从2012年1月1日 - 12/3/12运行报告。如果你在当天运行它,这会起作用...今天我试图运行结束日期“12/31/12”,但是我没有返回任何结果,因为我认为它是基于今天的日期获取开始日期?下面是我的查询:如何基于结束日期运行年至今的查询

SELECT  Store_Number, COUNT(DISTINCT Customer_Email_Address) AS Customer_email_address, COUNT(DISTINCT Invoice_Number) AS [Total Cars], 
         @enddate AS End_Date, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS Start_Date 
FROM   Invoice_Tb 
WHERE  (Invoice_Date BETWEEN DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AND CONVERT(Datetime, @enddate, 102)) 
GROUP BY Store_Number 
+0

你的意思是你试着用''2012-12-03''替换'getdate()'? –

回答

4

@enddate参数替换GetDate(),它应该工作:

SELECT   
    Store_Number, 
    COUNT(DISTINCT Customer_Email_Address) AS Customer_email_address, 
    COUNT(DISTINCT Invoice_Number) AS [Total Cars], 
    @enddate AS End_Date, 
    DATEADD(yy, DATEDIFF(yy, 0, @enddate), 0) AS Start_Date 
FROM Invoice_Tb 
WHERE (Invoice_Date BETWEEN DATEADD(yy, DATEDIFF(yy, 0, @enddate), 0) 
        AND CONVERT(Datetime, @enddate, 102)) 
GROUP BY Store_Number 

如果查询:

declare @enddate datetime = '12/31/2012' 

select DATEADD(yy, DATEDIFF(yy, 0, @enddate), 0) 

它将返回2012-01-01这就是你想。

+0

谢谢!太棒了 – Shmewnix

相关问题