gpt4 book ai didi

sql-server - Group by 子句适用于一种环境,但不适用于另一种环境

转载 作者:行者123 更新时间:2023-12-04 00:42:48 26 4
gpt4 key购买 nike

我面前有一个绝对令人费解的案例。我有两个数据库环境 A 和 B,其中环境 B 是根据 A 的备份创建的。我正在运行一个相当简单的查询:

SELECT
customers.customerName (* varchar(100), not null *)
,countries.countryName (* varchar(100), not null *)
,Balance = Sum(invoices.Amount) (* money, not null *)
FROM invoices
INNER JOIN customers
ON customers.customerID = invoices.customerID
INNER JOIN countries
ON countries.countryID = customers.countryID
GROUP BY
customers.customerName
,countries.countryName
HAVING
Sum(invoices.Amount) <> 0
ORDER BY
customers.customerName

该查询返回发票余额非零的用户列表。环境 A 的结果类似于以下内容:

customerName        countryName        Balance
------------ ----------- -------
A United States 20.0000
B United States -5.0000
C Canada 199.9900
D Canada -0.0100
E United States 55.5900

环境B上的结果如下:

customerName        countryName        Balance
------------ ----------- -------
A United States 10.0000
A United States -5.0000
A United States -1.0000
A United States 17.0000
A United States -1.0000
B United States -1.0000
B United States -4.0000
C Canada 100.9900
C Canada 99.9900
...

查询在环境 A 上运行良好,但看起来好像 GROUP BY 子句在环境 B 中被完全忽略。

当我从 SELECT 和 HAVING 子句中注释掉 Sum(invoices.Amount) 时,查询按预期工作,因此它肯定连接到我的 invoices.Amount 字段。

我已经备份了A并将其恢复到B,并且SqlDelta(数据库的差异工具)显示数据库是相同的,所以这不是数据问题,它必须是配置问题 - 但我没有知道去哪里寻找。

如果相关的话,这两个环境都在 Windows Server 2003 上使用 SQL Server 2000。这两个环境都安装在两个单独的服务器、单独的 SQL Server 实例和单独的 Windows Server 2003 实例上。

什么可能导致 SQL Server 不对 invoices.Amount 字段进行分组?

最佳答案

尝试此查询以尝试以更简单的形式重现问题:

SELECT customerName, Count(*)
FROM customer
GROUP BY customerName
ORDER BY customerName

尝试此查询来检查客户名称中的尾随空格是否可能成为进行不同分组的原因。

SELECT customerName, Count(*)
FROM
(
SELECT '|' + customerName + '|' as customerName
FROM customer
) as sub
GROUP BY customerName
ORDER BY customerName

关于sql-server - Group by 子句适用于一种环境,但不适用于另一种环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/951992/

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