【问题标题】:Get the COUNT of data for last 4 years monthly by using CASE statement使用 CASE 语句获取过去 4 年每月的数据 COUNT
【发布时间】:2021-06-15 11:45:10
【问题描述】:

我试过了:

SELECT DISTINCT 
    MONTH(ENCOUNTER_DATE) 'MONTH',
    COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -1, GETDATE()) THEN CUSTOMER_ID END)  ,
    COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -2, GETDATE()) THEN CUSTOMER_ID END),
    COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -3, GETDATE()) THEN CUSTOMER_ID END),
    COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE()) THEN CUSTOMER_ID END)
FROM 
    PATIENT_ENCOUNTERS
GROUP BY 
    MONTH(ENCOUNTER_DATE)
ORDER BY 
    MONTH(ENCOUNTER_DATE)

每个月的数据计数被添加到同月的下一年。

我用下面的查询交叉检查了数据不匹配的地方

SELECT 
    YEAR(ENCOUNTER_DATE), COUNT(CUSTOMER_ID) 
FROM 
    PATIENT_ENCOUNTERS
WHERE 
    ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE())
GROUP BY 
    YEAR(ENCOUNTER_DATE)
ORDER BY 
    YEAR(ENCOUNTER_DATE) DESC

有人可以帮助我仅使用案例语句来查找过去 4 年中每月的数据吗?

【问题讨论】:

  • 比较混乱,能不能先显示一些基本数据,然后通过excel输出你需要的数据。
  • 仅供参考,它不是一个 case statement,而是一个 case expression。您需要展示样本数据和预期结果,以便我们提供帮助。
  • 既然有GROUP BY,为什么还要DISTINCT?您应该使用括号[MONTH] 引用列名

标签: sql sql-server tsql sql-server-2008


【解决方案1】:

您的问题是您设置的是开始日期而不是结束日期。尝试类似以下的操作。

COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE()) AND ENCOUNTER_DATE < DATEADD(YEAR, -3, GETDATE()) THEN CUSTOMER_ID END)

【讨论】:

  • @SmitaAnde 太好了,我很高兴它正在工作!如果此答案对您有所帮助,请花点时间将其标记为已接受的答案:)
【解决方案2】:

试试这个:

SELECT DISTINCT MONTH(ENCOUNTER_DATE) 'MONTH',
COUNT(CASE WHEN year(ENCOUNTER_DATE) = YEAR(GETDATE()) THEN CUSTOMER_ID END)  ,
COUNT(CASE WHEN year(ENCOUNTER_DATE)= YEAR(GETDATE())-1 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)= YEAR(GETDATE())-2 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)= YEAR(GETDATE())-3 THEN CUSTOMER_ID END)
FROM PATIENT_ENCOUNTERS
GROUP BY MONTH(ENCOUNTER_DATE)
ORDER BY MONTH(ENCOUNTER_DATE)

在这里,YEAR(GETDATE()) 我得到了当年的年份和 YEAR(GETDATE())-1 去年的年份部分,依此类推。然后我将今年与遇到日期的年份作为year(encounter_date) = YEAR(GETDATE()) 进行比较,以得到当年的customer_id,然后按月分组。

要获得年度累计计数:

SELECT DISTINCT MONTH(ENCOUNTER_DATE) 'MONTH',
    COUNT(CASE WHEN year(ENCOUNTER_DATE) = YEAR(GETDATE()) THEN CUSTOMER_ID END)  ,
    COUNT(CASE WHEN year(ENCOUNTER_DATE)>= YEAR(GETDATE())-1 THEN CUSTOMER_ID END),
    COUNT(CASE WHEN year(ENCOUNTER_DATE)>= YEAR(GETDATE())-2 THEN CUSTOMER_ID END),
    COUNT(CASE WHEN year(ENCOUNTER_DATE)>= YEAR(GETDATE())-3 THEN CUSTOMER_ID END)
    FROM PATIENT_ENCOUNTERS
    GROUP BY MONTH(ENCOUNTER_DATE)
    ORDER BY MONTH(ENCOUNTER_DATE)

【讨论】:

  • 您好,此查询还可以详细显示每年每月的数据。谢谢
猜你喜欢
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
相关资源
最近更新 更多