我找不到问题。我有很多桌子相互连接。我需要从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.Id
(Id
表中的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
那么为什么它会返回不正确的实例数?
答案 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....
但我不知道您发布的查询如何返回您说的结果,所以我认为您可能在问题中犯了错误。