Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL-查询不存在的记录为空_Sql Server - Fatal编程技术网

Sql server SQL-查询不存在的记录为空

Sql server SQL-查询不存在的记录为空,sql-server,Sql Server,我希望这些记录能不经我的质疑就寄来。 请帮帮我。现在谢谢你 SELECT ROUTE_ID, ISNULL(COUNT(*), 0) AS TOTAL_CALL FROM dbo.tblCall_Report AR CROSS JOIN tblRoute R INNER JOIN tblNotification_Report BR ON R.ROUTE_ID = BR.RouteID WHERE CAST(BR.Notificatio

我希望这些记录能不经我的质疑就寄来。 请帮帮我。现在谢谢你

SELECT 
    ROUTE_ID,
    ISNULL(COUNT(*), 0) AS TOTAL_CALL
FROM 
    dbo.tblCall_Report AR 
CROSS JOIN 
    tblRoute R 
INNER JOIN 
    tblNotification_Report BR ON R.ROUTE_ID = BR.RouteID
WHERE 
    CAST(BR.NotificationDateTime AS DATE) = '04.01.2017'
    AND BR.CallNotification = 1 
    AND (BR.NotificationStatus = 1 OR BR.NotificationStatus IS NULL)
    AND BR.RouteID IN (7434,7423)
GROUP BY 
    ROUTE_ID
tblCall\u报告

NotificationDateTime
----------------------
2017-04-01
TBL通知报告

NotificationDateTime     RouteID
--------------------------------
2017-04-01                 7434
结果:

ROUTE_ID  | TOTAL_CALL
----------+-----------
   7434   |      1
我想要这些结果:

ROUTE_ID | TOTAL_CALL
---------+-----------
   7434  |    1    
   7423  |    0

如果原始表中存在路由
7423
,那么我猜
内部连接正在过滤掉该路由。改用
左连接

SELECT ROUTE_ID,
       ISNULL(COUNT(*),0) AS TOTAL_CALL
FROM dbo.tblCall_Report AR
CROSS JOIN tblRoute R
LEFT JOIN tblNotification_Report BR
    ON R.ROUTE_ID = BR.RouteID AND
       BR.RouteID IN (7434, 7423)
WHERE CAST(BR.NotificationDateTime AS DATE) = '04.01.2017' AND
      BR.CallNotification = 1 AND
      (BR.NotificationStatus =1 OR BR.NotificationStatus IS NULL)
GROUP BY ROUTE_ID

您应该使用
LEFT-OUTER-JOIN
,并且需要相应地修改
WHERE
子句。检查下面的查询

SELECT 
    ROUTE_ID,
    SUM(CASE WHEN BR.RouteID IS NOT NULL THEN 1 ELSE 0 END) AS TOTAL_CALL
FROM 
    dbo.tblCall_Report AR 
CROSS JOIN 
    tblRoute R 
LEFT JOIN 
    tblNotification_Report BR ON R.ROUTE_ID = BR.RouteID
    AND CAST(BR.NotificationDateTime AS DATE) = '04.01.2017'
    AND BR.CallNotification = 1 
    AND (BR.NotificationStatus = 1 OR BR.NotificationStatus IS NULL)
WHERE R.Route_ID IN (7434,7423)
GROUP BY 
    ROUTE_ID
下面是我得到的结果

希望这对您有所帮助。

您需要:

  • 使用
    左连接
  • 使用可为空的值将操作数移动到
  • 在where中使用
    R
    ,因为它肯定有一个值
    
    挑选
    路线号,
    CASE ISNULL(MIN(BR.RouteID),0时为0,然后0 ELSE计数(*)作为TOTAL_调用结束
    从…起
    dbo.tblCall_报告AR
    交叉连接
    tblRoute
    左连接
    TBL通知\u报告BR在R.ROUTE\u ID=BR.RouteID上
    和演员阵容(BR.NotificationDateTime AS DATE)='04.01.2017'
    和BR.CallNotification=1
    和(BR.NotificationStatus=1或BR.NotificationStatus为空)
    分组
    其中R.RouteID位于(74347423)
    路线号
    

route
7423
是否出现在您的原始数据集中?是的,tim BiegeleisenI认为您可能需要一个左外连接来代替内连接实际上where子句会使其仍然过滤掉记录-使其成为on子句的一部分,并使where子句R.RouteID进入(74347423)@JamesCasey我想你已经把它倒过来了,IN
中的
条件应该从
WHERE
子句移到
ON
子句,以避免过早地过滤掉记录。结果是一样的。耶。。。我当天删除的第一个答案你能将我的电脑与Teamviewer连接吗?我根据James Casey的建议更新了我的查询。请再试一次。结果是一样的(结果:路由ID:7434 |呼叫总数:1,路由ID:7423 |呼叫总数:1@RızaSoylu MaxJoffrey我已更新我的答案以获得正确的结果。您的代码假定最多可以有一行。什么是错误?列“TCALL.TOTAL_CALL”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY中子句。@RızaSoylu-MaxJoffrey您在select语句中包含了任何字段吗?@RızaSoylu-MaxJoffrey感谢您指出这一点。我已经编辑了我的答案来解决这个问题。