SQL。 COUNT() 函数的错误结果

SQL. Wrong result of COUNT() function

我找不到问题。我有很多 table 互相加入。我需要从 FormInstances table 中获取表单实例的计数(应该计数 Id 列),但它返回了错误的数据。

所以我的查询看起来像:

DECLARE @dateStart  DATE        = NULL,
@dateEnd        DATE            = NULL,
@workshop       NVARCHAR(60)    = '',
@shiftNr        NVARCHAR(60)    = '',
@article        NVARCHAR(60)    = '',
@controllier    NVARCHAR(60)    = 'Name of Controlier'

SELECT COUNT(FI.Id) AS [Count of Instances]
FROM FormInstances AS FI
LEFT JOIN FormFields        AS FF
    ON FI.FormVersionId = FF.FormVersionid 
LEFT JOIN .....
WHERE
FF.Id               =   FV.FormFieldId      AND
FI.Id               =   ...

现在的输出:

Count of Instances
     414400
     414400
     414400
     414400
     384800

输出应该是:

Count of Instances
       5

如果我传递给 SELECT 子句:FI.Id(来自 FormInstances table 的 Id 列)在下面:

SELECT COUNT(FI.Id) AS [Count of Instances],
             FI.Id  AS [Instance Ids]
FROM....

我得到了正确的 Instance Ids 但同样的,错误的实例数:

Count of Instances    Instance Ids
      414400              23
      414400              24
      414400              25
      414400              26
      384800              52

那么为什么它返回不正确的实例数?

您正在执行一个联接,即乘以记录数。尝试在计数中使用 distinct 来删除重复项:

COUNT(distinct FI.Id)

如果你只想得到:

 Count of Instances
        5

你应该改变:

SELECT COUNT(FI.Id) AS [Count of Instances],
             FI.Id  AS [Instance Ids]
FROM....

为此:

SELECT COUNT(*) AS [Count of Instances]
FROM....

但我看不出您发布的查询如何 return 您所说的结果,所以我认为您可能在问题中犯了错误。

您应该select一个具有唯一值的字段,然后使用具有 Distinct 的计数函数。

COUNT(distinct FI.Id)