Sql 每季度(每3个月)检索数据,并显示季度的最后一天

Sql 每季度(每3个月)检索数据,并显示季度的最后一天,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有个问题,我无法得到季度数据的总和 我希望我的输出如下: @startdate='5/17/2017' 及 输出: AccountNo 06/30/2017 -------------------------- 320002101 3453543.67 320003478 103343.56 用户选择两个日期,第一个是@startdate,另一个是@enddate, Enddate应该决定选择哪个季度,当然,如果是5月,则必须显示6月(第6个月)和季度的最后一

我有个问题,我无法得到季度数据的总和

我希望我的输出如下:

@startdate='5/17/2017' 

输出:

AccountNo     06/30/2017
--------------------------
320002101     3453543.67  
320003478     103343.56
用户选择两个日期,第一个是@startdate,另一个是@enddate, Enddate应该决定选择哪个季度,当然,如果是5月,则必须显示6月(第6个月)和季度的最后一天

我的查询是这样的,但显然不起作用,我试着在数据函数中混用一些东西

 SELECT bal.AccountNo,acc.AccountName ,
 DATEADD(quarter,DATEDIFF(quarter,0,@enddate),30) [quarter], 
SUM(bal.Sum)  [quarterlySum]
FROM dbo.Balances AS bal
INNER JOIN dbo.Accounts AS acc
ON acc.AccountNo = bal.AccountNo
WHERE (bal.BalanceDate BETWEEN @startdate AND @enddate) 
GROUP BY acc.AccountName,bal.AccountNo

不确定下面的方法是否有效,但值得一试:

declare @startdate date = (select getdate()- 60 )
declare @enddate date = (select getdate() - 30)
select @startdate, @enddate

declare @sql nvarchar(1000)
set @sql = 
    'SELECT bal.AccountNo,
        SUM(bal.Sum) as ''' +  replace(convert(nvarchar(10), DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, @enddate) +1, 0)), 101), '/', '') +'''
        INNER JOIN dbo.Accounts AS acc
        ON acc.AccountNo = bal.AccountNo
    WHERE (bal.BalanceDate BETWEEN ''' + convert(varchar, @startdate, 101) + ''' AND ''' + convert(varchar, @enddate, 101) +''')
    GROUP BY acc.AccountName'

print @sql
exec (@sql)

我认为没有其他方法可以比上面那样动态地完成这项工作。

不确定下面的方法是否有效,但值得一试:

declare @startdate date = (select getdate()- 60 )
declare @enddate date = (select getdate() - 30)
select @startdate, @enddate

declare @sql nvarchar(1000)
set @sql = 
    'SELECT bal.AccountNo,
        SUM(bal.Sum) as ''' +  replace(convert(nvarchar(10), DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, @enddate) +1, 0)), 101), '/', '') +'''
        INNER JOIN dbo.Accounts AS acc
        ON acc.AccountNo = bal.AccountNo
    WHERE (bal.BalanceDate BETWEEN ''' + convert(varchar, @startdate, 101) + ''' AND ''' + convert(varchar, @enddate, 101) +''')
    GROUP BY acc.AccountName'

print @sql
exec (@sql)

我认为,除了如上所述的动态操作之外,没有其他方法了。

我的问题是从currentdate获取季度末,而且不仅是从currentdate获取季度末,而且是从currentdate获取季度末的月末

这是我用来检索数据的代码

DECLARE @startdate DATE; SET @startdate='5/2/2017';
DECLARE @enddate DATE; SET @enddate='6/13/2017'   
DECLARE @datatype VARCHAR; SET @datatype=3;

SELECT bal.AccountNo,acc.AccountName ,
CASE @datatype WHEN 3 THEN SUM(bal.Sumn)END AS [balance] 
FROM dbo.Balances AS bal
INNER JOIN dbo.Accounts AS acc
ON acc.AccountNo = bal.AccountNo
WHERE (bal.BalanceDate BETWEEN   convert(varchar, @startdate, 101)   AND   
convert(varchar, @enddate, 101))
GROUP BY acc.AccountName,bal.AccountNo

我的问题是从currentdate开始计算季度末,而且不仅仅是季度末,还要从currentdate开始计算季度末的月底

这是我用来检索数据的代码

DECLARE @startdate DATE; SET @startdate='5/2/2017';
DECLARE @enddate DATE; SET @enddate='6/13/2017'   
DECLARE @datatype VARCHAR; SET @datatype=3;

SELECT bal.AccountNo,acc.AccountName ,
CASE @datatype WHEN 3 THEN SUM(bal.Sumn)END AS [balance] 
FROM dbo.Balances AS bal
INNER JOIN dbo.Accounts AS acc
ON acc.AccountNo = bal.AccountNo
WHERE (bal.BalanceDate BETWEEN   convert(varchar, @startdate, 101)   AND   
convert(varchar, @enddate, 101))
GROUP BY acc.AccountName,bal.AccountNo

您尝试过的一些示例数据和查询将是令人惊叹的,然后在季度末您可以使用这个@xdd,正如您所看到的,我有日期-may,它已经是第二季度了,我需要显示第二季度和本月结束日期的余额总和,特别是您希望在您的输出中有三列:“32002101100.67 06/30/2017”?或者您希望将该列命名为“06/30/2017”?该列的名称将是四分之一样本数据末尾的“日期”,您尝试的查询将是令人惊叹的,然后在季度末您可以使用此@xdd,如您所见,我有日期-五月,已经是第二季度,我需要显示第二季度和本月结束日期的余额总和,特别是您希望在输出中有三列:“32000210100500.67 06/30/2017”?或者您希望将该列命名为“06/30/2017”?该列的名称将是“日期”-季度末是否需要在SUM(bal.SUM)@Tilek N之后添加“and+”。不这样认为,当前代码应该有效。您是否有任何错误?是否需要在SUM(bal.SUM)@Tilek N之后添加'and+。不要这样认为,当前代码应该可以工作。你有什么错误吗?