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太好了,我很高兴它起作用了!如果这个答案对您有帮助,请花点时间将其标记为已接受的答案:)嗨,这个查询还可以每月提供每年的详细数据。谢谢,非常欢迎。