Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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。COUNT()函数的结果错误_Sql_Sql Server_Sql Server 2008_Tsql_Count - Fatal编程技术网

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

SQL。COUNT()函数的结果错误,sql,sql-server,sql-server-2008,tsql,count,Sql,Sql Server,Sql Server 2008,Tsql,Count,我找不到问题。我有许多桌子连在一起。我需要从FormInstances表(应该countId列)中获取表单实例的计数,但它返回了错误的数据 因此,我的查询如下所示: DECLARE @dateStart DATE = NULL, @dateEnd DATE = NULL, @workshop NVARCHAR(60) = '', @shiftNr NVARCHAR(60) = '', @article

我找不到问题。我有许多桌子连在一起。我需要从
FormInstances
表(应该count
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
Id
列来自
FormInstances
表),如下所示:

SELECT COUNT(FI.Id) AS [Count of Instances],
             FI.Id  AS [Instance Ids]
FROM....
我得到了正确的
实例ID
,但实例数相同,错误:

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

但是我看不出您发布的查询如何返回您所说的结果,因此我认为您可能在这个问题上犯了错误。

您在FormInstances中试图计算什么?如果您使用计数和主键,您将始终得到1。我希望根据此
WHERE
子句从
FormInstances
表中获得
Id
的计数。FormInstances的Id的计数可能是其他表中的外键?如果这是正确的,那么将计数移动到具有此信息的另一个表中。为什么要在where中重复连接条件?你知道把左撇子放在哪里会打断左撇子吗?已发布的查询不可能返回5行。
SELECT COUNT(*)作为[COUNT of Instances]
返回与
SELECT COUNT(FI.Id)作为[COUNT of Instances]
请发布示例数据。我认为您的查询不可能返回您所说的结果。@StanislovasKalašnikovas您是否偶然地按FI.Id进行分组?以上应该做的我真的错过了,这里是分组。非常感谢。