Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 Sum返回正确答案。。。有时_Sql_Datetime_Ms Access_Sum_Left Join - Fatal编程技术网

Sql Sum返回正确答案。。。有时

Sql Sum返回正确答案。。。有时,sql,datetime,ms-access,sum,left-join,Sql,Datetime,Ms Access,Sum,Left Join,我有一个follow SQL,它返回正确的答案,直到第二个表匹配为止。任何回报中都应该只有1,但我在不同的地方得到2和3。我在表格中有3个不同的日期,有时当它在PA Sim Cnt中遇到某些情况时,会影响2 Mtr Cnt中的回报 SELECT [Membership tbl].[Call Sign], Sum(IIf([2 Meter Net tbl].[Cur Date]=#9/15/2020#,1,0)) AS [2 Mtr Cnt], Sum(IIf([PA Simplex tbl].[

我有一个follow SQL,它返回正确的答案,直到第二个表匹配为止。任何回报中都应该只有1,但我在不同的地方得到2和3。我在表格中有3个不同的日期,有时当它在PA Sim Cnt中遇到某些情况时,会影响2 Mtr Cnt中的回报

SELECT [Membership tbl].[Call Sign], Sum(IIf([2 Meter Net tbl].[Cur Date]=#9/15/2020#,1,0)) AS [2 Mtr Cnt], Sum(IIf([PA Simplex tbl].[Cur Date]=#9/15/2020#,1,0)) AS [PA Sim Cnt]
FROM ([Membership tbl] LEFT JOIN [2 Meter Net tbl] ON [Membership tbl].[Call Sign] = [2 Meter Net tbl].[Call Sign]) LEFT JOIN [PA Simplex tbl] ON [Membership tbl].[Call Sign] = [PA Simplex tbl].[Call Sign]
GROUP BY [Membership tbl].[Call Sign]
ORDER BY [Membership tbl].[Call Sign];

我已经为此工作了几天,并尝试了我能想到的各种组合。

我怀疑您需要在加入子查询之前预先聚合,因此每个日期只计算一次:

SELECT m.[Call Sign], mn.[2 Mtr Cnt], ps.[PA Sim Cnt]
FROM (
    [Membership tbl] m
    LEFT JOIN (
        SELECT [Call Sign], Sum(IIf([Cur Date]=#9/15/2020#,1,0)) AS [2 Mtr Cnt]
        FROM [2 Meter Net tbl] 
        GROUP BY [Call Sign]
    ) mn ON m.[Call Sign] = mn.[Call Sign]
) LEFT JOIN (
    SELECT [Call Sign], Sum(IIf([Cur Date]=#9/15/2020#,1,0)) AS [PA Sim Cnt]
    FROM [PA Simplex tbl] 
    GROUP BY [Call Sign]
) ps ON m.[Call Sign] = ps.[Call Sign]
ORDER BY m.[Call Sign];

请在代码问题中给出一个剪切、粘贴和可运行的代码,包括作为代码输入的最小代表性示例;期望和实际输出,包括逐字记录错误消息;标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。调试基础。对于包含DBMS和DDL(包括约束和索引)的SQL,请输入格式化为表的代码。暂停总体目标的工作,将代码切碎到第一个表达式,没有给出您期望的内容,说出您期望的内容和原因。这似乎是一个常见错误,人们希望一些联接,每个联接可能涉及不同的键,一些子查询,每个查询可能涉及联接和/或聚合,但是他们错误地尝试进行所有的连接,然后进行所有的聚合,或者在以前的聚合上进行聚合。在适当的行上编写单独的聚合和/或聚合一个case语句;在唯一列集上联接。有时,独立聚合在非键联接之后选择正确的值。两个输入表中任何一个的非键上的联接都可以为每个表的每个键提供多行。当我键入上面提到的内容时,您的查询没有将指定的表达式“Call Sign”作为聚合函数的一部分。@Rang624:我的错,我忘记了第一个子查询中的GROUP BY子句。修正了。我真的很感谢你的帮助,这太接近了,我能尝到。首先它向我查询date参数,然后它在0中找到日期的所有位置,我希望得到总和。后来我想在日期之间输入,如果它没有找到空白的呼号,我希望是0。@Rang624:使用Nz将空值转换为0,例如:选择m.[Call Sign],Nzmn.[2 Mtr Cnt],0作为[2 Mtr Cnt],Nzps.[PA Sim Cnt],0作为[PA Sim Cnt]FROM…仅代码的答案通常很差。解释其回答问题和/或解决或纠正问题的原因。
SELECT m.[Call Sign], Nz(mn.[2 Mtr Cnt],0) AS [2 Mtr Cnt], Nz(ps.[PA Sim Cnt],0) AS [PA Sim Cnt]

FROM ([Membership tbl] AS m 
LEFT JOIN (SELECT [Call Sign], 
    Sum(IIf([2 Meter Net tbl].[Cur Date]=#9/15/2020#,1,0)) AS [2 Mtr Cnt] 
FROM [2 Meter Net tbl] 
GROUP BY [Call Sign])  AS mn ON m.[Call Sign] = mn.[Call Sign]) 

LEFT JOIN (SELECT [Call Sign], 
    Sum(IIf([PA Simplex tbl].[Cur Date]=#9/15/2020#,1,0)) AS [PA Sim Cnt] 
FROM [PA Simplex tbl] 
GROUP BY [Call Sign])  AS ps ON m.[Call Sign] = ps.[Call Sign]

ORDER BY m.[Call Sign];