当前位置:  开发笔记 > 编程语言 > 正文

在count(*)和self join上感到困惑

如何解决《在count(*)和selfjoin上感到困惑》经验,为你挑选了1个好方法。

我想返回当月和当年的所有申请日期.这一定很简单,但我无法弄清楚.我知道我当前有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 

CodeRedick.. 6

您根本不需要任何连接.

您希望从tblEventDates计算loanID列,并且您希望根据与当前月份或当前年份匹配的日期有条件地执行此操作.

所以:

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.实际上,甚至不需要为年度做一个条件,因为你只是查询那一年的所有内容.



1> CodeRedick..:

您根本不需要任何连接.

您希望从tblEventDates计算loanID列,并且您希望根据与当前月份或当前年份匹配的日期有条件地执行此操作.

所以:

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.实际上,甚至不需要为年度做一个条件,因为你只是查询那一年的所有内容.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有