Sql 使用CASE语句每月获取过去4年的数据计数

Sql 使用CASE语句每月获取过去4年的数据计数,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,Sql Server 2008,我试过这个: 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),

我试过这个:

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年的每月数据吗?只使用案例说明。

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

COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE()) AND ENCOUNTER_DATE < DATEADD(YEAR, -3, GETDATE()) THEN CUSTOMER_ID END)
计数(遇到日期>=DATEADD(年份,-4,GETDATE())和遇到日期
试试这个:

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(遭遇年)=year(GETDATE())
,以获得当年的
customer\u 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)

它让人困惑,你能不能显示一些基本数据,然后通过excel输出你需要的数据。仅供参考,它不是一个case语句,而是一个case表达式。您需要显示样本数据和预期结果,以便我们提供帮助。如果您有一个
分组依据
,为什么要使用
DISTINCT
?您应该使用括号引用列名
[MONTH]
好的,谢谢您的帮助now@SmitaAnde太好了,我很高兴它起作用了!如果这个答案对您有帮助,请花点时间将其标记为已接受的答案:)嗨,这个查询还可以每月提供每年的详细数据。谢谢,非常欢迎。