对count(*)和自我加入感到困惑

时间:2020-03-06 14:59:59  来源:igfitidea点击:

我想返回当月和当年的所有申请日期。这必须很简单,但是我无法弄清楚。我知道当月有2个日期,当年有90个日期。右,左,外,内我都尝试了所有方法,只是在墙上扔了一些代码,试图看清将要粘住的东西,但没有一个起作用。我或者两栏都得到2,或者两栏都得到180。这是我最新的选择声明。

SELECT count(a.evdtApplication) AS monthApplicationEntered,  
       count (b.evdtApplication) AS yearApplicationEntered
FROM tblEventDates a 
RIGHT OUTER JOIN tblEventDates b ON a.LOANid = b.loanid 
WHERE datediff(mm,a.evdtApplication,getdate()) = 0 
      AND datediff(yy,a.evdtApplication, getdate()) = 0 
      AND datediff(yy,b.evdtApplication,getdate()) = 0

解决方案

我们根本不需要任何联接。

我们想从tblEventDates中计数借贷ID列,并希望根据与当前月份或者当前年份匹配的日期有条件地进行计数。

所以:

SELECT SUM( CASE WHEN Month(a.evdtApplication) = MONTH(GEtDate() THEN 1 END) as monthTotal,
        count(*)
FROM tblEventDates a
WHERE a.evdtApplication BETWEEN '2008-01-01' AND '2008-12-31'

要做的是选择今年所有活动的日期,然后将其与条件相匹配。如果它与当前月份不匹配,则不会加1. 实际上,甚至不需要为该年度做条件,因为我们只是查询该年度的所有内容。