gpt4 book ai didi

sql - SQL Server 中的 SUM 返回错误值

转载 作者:行者123 更新时间:2023-12-01 22:06:27 24 4
gpt4 key购买 nike

我在使用 SQL Server 2014 中的一个特定查询时遇到了一些问题。

求和函数返回错误的结果。

在我的例子中,我的 SQL 查询只返回一行,例如有两个字段:cost 和 key。

成本值为 10,键值为 ke890wkw。

我不知道为什么,但是如果我运行类似的东西

SELECT SUM(COST) TOTAL_COST, RTRIM(KEY) 
FROM TABLE
WHERE KEY = 'ke890wkw'

它返回 20。

带有此“错误”(?)的完整真实查询在图片 sql2 上

SELECT 
SUM(CONVERT(FLOAT, DADOSREQF.compValorFrete)) vlr_total_frete,
--CONVERT(FLOAT, DADOSREQF.compValorFrete) vlr_total_frete,
(RTRIM(DADOSFORMF.NUMSOLICITACAO) + RTRIM(DADOSREQF.compCodFornecedor) +
RTRIM(DADOSREQF.compCodCondicaoPagamento) + RTRIM(DADOSREQF.compFrete) +
RTRIM(DADOSREQF.compCodTransportadora)) chave
FROM
FLUIG.DBO.ML001102 DADOSFORMF WITH(NOLOCK)
INNER JOIN
FLUIG.DBO.ML001105 DADOSREQF WITH(NOLOCK) ON DADOSREQF.DOCUMENTID = DADOSFORMF.DOCUMENTID
WHERE
(RTRIM(DADOSFORMF.NUMSOLICITACAO) + RTRIM(DADOSREQF.compCodFornecedor) +
RTRIM(DADOSREQF.compCodCondicaoPagamento) + RTRIM(DADOSREQF.compFrete) +
RTRIM(DADOSREQF.compCodTransportadora)) = '1071002999439000103030F040'
AND DADOSFORMF.version = (SELECT MAX(version)
FROM FLUIG.DBO.ML001105 vr
WHERE vr.documentid = DADOSFORMF.documentid)
GROUP BY
RTRIM(DADOSFORMF.NUMSOLICITACAO),
RTRIM(DADOSREQF.compCodFornecedor),
RTRIM(DADOSREQF.compCodCondicaoPagamento),
RTRIM(DADOSREQF.compFrete),
RTRIM(DADOSREQF.compCodTransportadora),
compValorFrete

这与返回不正确值的外部求和的查询相同。

SELECT
SUM(a.vlr_total_frete),
a.chave
FROM
(SELECT
--SUM(CONVERT(FLOAT, DADOSREQF.compValorFrete)) vlr_total_frete,
CONVERT(FLOAT, DADOSREQF.compValorFrete) vlr_total_frete,
(RTRIM(DADOSFORMF.NUMSOLICITACAO) + RTRIM(DADOSREQF.compCodFornecedor) + RTRIM(DADOSREQF.compCodCondicaoPagamento) + RTRIM(DADOSREQF.compFrete) + RTRIM(DADOSREQF.compCodTransportadora)) chave
FROM
FLUIG.DBO.ML001102 DADOSFORMF WITH(NOLOCK)
INNER JOIN
FLUIG.DBO.ML001105 DADOSREQF WITH(NOLOCK) ON DADOSREQF.DOCUMENTID = DADOSFORMF.DOCUMENTID
WHERE
(RTRIM(DADOSFORMF.NUMSOLICITACAO) + RTRIM(DADOSREQF.compCodFornecedor) + RTRIM(DADOSREQF.compCodCondicaoPagamento) + RTRIM(DADOSREQF.compFrete) + RTRIM(DADOSREQF.compCodTransportadora)) = '1071002999439000103030F040'
AND DADOSFORMF.version = (SELECT MAX(version)
FROM FLUIG.DBO.ML001105 vr
WHERE vr.documentid = DADOSFORMF.documentid)
GROUP BY
RTRIM(DADOSFORMF.NUMSOLICITACAO),
RTRIM(DADOSREQF.compCodFornecedor),
RTRIM(DADOSREQF.compCodCondicaoPagamento),
RTRIM(DADOSREQF.compFrete),
RTRIM(DADOSREQF.compCodTransportadora),
compValorFrete) a
GROUP BY
a.chave

以及它在 SQL Server 2014 上运行的一些屏幕截图。

/image/dcGb4.png

/image/ww4gp.png/image/Sv33l.png

最佳答案

正在发生的事情的简化示例,考虑下表:

col1   |   col2
A | 10
A | 10

这将返回一行:

SELECT col1, col2
FROM table
GROUP BY col1, col2

col1 | col2
A | 10

添加一个外部 SUM 将应用于该行:

SELECT SUM(col2)
FROM (SELECT col1, col2
FROM table
GROUP BY col1, col2) A

col1 | col2
A | 10

但是,直接添加 SUM 将考虑两行并将值加倍:

SELECT col1, SUM(col2)
FROM table
GROUP BY col1

col1 | col2
A | 20

关于sql - SQL Server 中的 SUM 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51430053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com