sql - 计算每月关闭或为空的帐户数量
问题描述
我想获得一年中每个月的帐号总数,但也让用户可以选择他们想要查看的月份。我需要能够查看在他们选择的开始日期的月初和结束日期的月底之间关闭的帐户数量,或者如果关闭日期为空,但每个月。如果他们只选择 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)
这是我现在的结果:
这是我想要的结果:
解决方案
这应该给出您想要的结果,但按行而不是按列。当关闭日期为空时,我还必须对日期使用什么做出假设。如果您需要更多帮助或这不正确,我们可以努力解决
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))))
推荐阅读
- python - 重新索引不填充 NaN
- nativescript-vue - 如何将 vue-apollo 与 Nativescript 一起使用
- javascript - Officejs- 使用 xml 映射将 contentcontrol 与 customxmlpart 绑定
- excel - VBA Excel循环用于复制多个表并更改字符串
- java - Unreachable statement Error While inflating a fragment view
- reactjs - React typescript 将 props 接口传递给类组件
- java - 从 RecyclerView 中删除多个选定项目
- javascript - Screenleap API 与 Reactjs 的集成
- asp.net-core-mvc - 如何让 TagHelper 只呈现没有父标签的纯文本?
- c++ - 模板类错误:未定义的引用