首页 > 解决方案 > 计算每月关闭或为空的帐户数量

问题描述

我想获得一年中每个月的帐号总数,但也让用户可以选择他们想要查看的月份。我需要能够查看在他们选择的开始日期的月初和结束日期的月底之间关闭的帐户数量,或者如果关闭日期为空,但每个月。如果他们只选择 1 月,我希望他们看到 1 月 1 日到 1 月 31 日的帐户总数,但如果他们选择 1 月到 12 月,我希望他们看到 1 月 1 日到 12 月 31 日,但我想要每月的总数。我也希望这也适用于所有年份。

DECLARE @StartDate AS SMALLDATETIME
DECLARE @EndDate AS SMALLDATETIME

SET @StartDate = '01-01-2019'
SET @EndDate = '12-31-2019'

SELECT DISTINCT COUNT(a.ACCOUNTNUMBER) AS [December]
FROM dbo.ACCOUNT A
WHERE ((a.CLOSEDATE >= DATEADD(month, DATEDIFF(month, 0, @StartDate), 0)
            AND a.CLOSEDATE <= EOMONTH(@EndDate))
            OR a.CLOSEDATE IS NULL)
            AND a.ProcessDate = CONVERT(VARCHAR(8), dateadd(day,-1, getdate()), 112)

这是我现在的结果:

在此处输入图像描述

这是我想要的结果:

在此处输入图像描述

标签: sqlsql-server

解决方案


这应该给出您想要的结果,但按行而不是按列。当关闭日期为空时,我还必须对日期使用什么做出假设。如果您需要更多帮助或这不正确,我们可以努力解决

DECLARE @StartDate AS SMALLDATETIME
DECLARE @EndDate AS SMALLDATETIME

SET @StartDate = '01-01-2019'
SET @EndDate = '12-31-2019'

SELECT DISTINCT COUNT(a.ACCOUNTNUMBER) AS [Accounts]
, DATENAME(m, Month(ISNULL(ClosedDate, a.ProcessDate = CONVERT(VARCHAR(8), dateadd(day, - 1, getdate()), 112)))) Monthof
FROM dbo.ACCOUNT A
WHERE 
    (
        (
            a.CLOSEDATE >= @StartDate
            AND a.CLOSEDATE <= @EndDate
        )
        OR a.CLOSEDATE IS NULL
    )
    AND a.ProcessDate = CONVERT(VARCHAR(8), dateadd(day, - 1, getdate()), 112)
GROUP BY
    DATENAME(m, Month(ISNULL(ClosedDate, a.ProcessDate = CONVERT(VARCHAR(8), dateadd(day, - 1, getdate()), 112))))

推荐阅读