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

时间:2015-03-19 13:06:37

标签: sql sql-server sql-server-2008 tsql count

我找不到问题。我有很多桌子相互连接。我需要从FormInstances表中计算表单实例(应该计算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.IdId表中的FormInstances列):

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

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

2 个答案:

答案 0 :(得分:10)

您正在进行连接,这会使记录数倍增。尝试在计数中使用distinct来删除重复项:

COUNT(distinct FI.Id)

答案 1 :(得分:2)

如果您只想获得:

 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....

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