我有一个查询,我正试图使用,这是给我的错误信息,我不知道如何/为什么。
如果我把它们分解成简单的查询,我就会得到我期望的数字。
这是一个给我带来麻烦的问题:
SELECT
[# of HR Devices] = COUNT(DISTINCT IIF((bom.[Commodity Code] IN ('002') AND [dbo].[fn_getFactoryStdCost]([ComponentPartID]) > 0 AND bom.[Qty] > 0), bom.[Component Part #], NULL)),
[Sum HR Devices] = SUM(DISTINCT IIF((bom.[Commodity Code] IN ('002') AND [dbo].[fn_getFactoryStdCost]([ComponentPartID]) > 0 AND bom.[Qty] > 0), bom.[Qty], NULL))
FROM
bomBreakdown bom
WHERE
[SourcePartID] = '5157'
我得到以下结果:
# of HR Devices | Sum HR Devices
----------------+---------------
20 | 15
现在,如果我使用简化的(即长手)查询,如下所示:
SELECT COUNT(*)
FROM bomBreakdown
WHERE [SourcePartID] = '5157'
AND [Commodity Code] IN ('002')
AND [dbo].[fn_getFactoryStdCost]([ComponentPartID]) > 0
AND [Qty] > 0
SELECT SUM([Qty])
FROM bomBreakdown
WHERE [SourcePartID] = '5157'
AND [Commodity Code] IN ('002')
AND [dbo].[fn_getFactoryStdCost]([ComponentPartID]) > 0
AND [Qty] > 0
我得到41和61是正确的数字。
以下是数据,使用相同的函数添加stdcost以供参考。
我就是搞不懂为什么我得到20和15,基本上应该是同一个查询。
我正在使用:
sql server 2019(v15.0.2070.41)
ssms版本18.5
1条答案
按热度按时间xzlaal3s1#
简化版和原版不一样。
简化版没有
DISTINCT
. 什么时候DISTINCT
如果存在,则在生成不同的值列表后对值求和。这意味着相同的值将只计算或求和一次。如果简化版本的结果是您所需要的,请删除DISTINCT
从两者COUNT
以及SUM
在原始查询中。简化版本中的计数未指定列。两者的区别
COUNT(*)
以及COUNT(column)
前者返回行计数,而后者返回该列的非空行计数。您可以运行这个简单的示例来查看它。你会看到它回来的3, 2
```CREATE TABLE Table1 (Col1 INT);
SELECT
[# of HR Devices] = SUM([Qty])
, [Sum HR Devices] = COUNT(*)
FROM bomBreakdown
WHERE
[SourcePartID] = '5157'
AND [Commodity Code] IN ('002')
AND [dbo].fn_getFactoryStdCost > 0
AND [Qty] > 0