对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. 实际上,甚至不需要为该年度做条件,因为我们只是查询该年度的所有内容。