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)
我找不到问题。我有很多 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)