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
表(应该countId
列)中获取表单实例的计数,但它返回了错误的数据
因此,我的查询如下所示:
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进行分组?以上应该做的我真的错过了,这里是分组。非常感谢。