繁体   English   中英

使用Join和where子句计算语句

[英]Count statement with Join and where clause

在此输入图像描述

前两个是单独的结果..第三个是我试图加入另一个表的语句。我的问题是我无法在sql语句中设置条件。 在最后一个连接语句中,我得到了两个带有Route Id的列和带有Flab = 1的和,但是我无法设置flag = 0的条件..请帮助我需要T2作为最后一列。

SELECT a.RouteCode, 
       SUM(CASE WHEN b.ScheduledFlag = '1' THEN 1 ELSE 0 END) AS T1,
       SUM(CASE WHEN b.ScheduledFlag = '0' THEN 1 ELSE 0 END) AS T2
FROM Routes a inner join CustomerVisits as b on a.RouteCode = b.RouteCode
WHERE b.RouteStartDate = '12/15/2011' 
and a.DepotCode = '6'
group by a.RouteCode

请注意,根据数据库连接的区域设置,您的日期格式字符串可能不明确。 使用类似ODBC规范的区域设置安全日期格式( yyyy-mm-dd hh:mi:ss

一种方法是分别创建每个计数查询,然后从每个计数查询执行左连接,这样如果两个计数表中都没有匹配,则不会过滤结果。

SELECT q1.routecode,
       t1,
       t2
FROM   routes
       LEFT JOIN (SELECT routecode,
                         COUNT(routecode) AS t1
                  FROM   customervisits
                  WHERE  ( routecode IN ( '701', '702', '704', '703', '705' ) )
                         AND routestartdate = '12/15/2011'
                         AND schelduledflag = '1'
                  GROUP  BY routecode) AS q1
         ON routes.routecode = q1.routecode
       LEFT JOIN (SELECT routecode,
                         COUNT(routecode) AS t2
                  FROM   customervisits
                  WHERE  ( routecode IN ( '701', '702', '704', '703', '705' ) )
                         AND routestartdate = '12/15/2011'
                         AND schelduledflag = '0'
                  GROUP  BY routecode) AS q2
         ON routes.routecode = q2.routecode
WHERE  a.depotcode = '6'  and (t1 is not null or t2 is not null);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM