私の目の前には絶対に不可解なケースがあります。A と B の 2 つのデータベース環境があり、環境 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 ではクエリは正常に機能しますが、環境 B では GROUP BY 句が完全に無視されているように見えます。
SELECT 句と HAVING 句からコメントアウトすると、クエリは期待どおりに機能するSum(invoices.Amount)
ため、フィールドに確実に接続されinvoices.Amount
ます。
AをバックアップしてBに復元しました.SqlDelta(データベースの差分ツール)はデータベースが同一であることを示しているため、データの問題ではなく、構成の問題である必要があります-しかし、どこにあるのかわかりません見る。
関連する場合、両方の環境が Windows Server 2003 で SQL Server 2000 を使用しています。両方の環境は、2 つの別個のサーバー、SQL Server の別個のインスタンス、および Windows Server 2003 の別個のインスタンスにインストールされます。
invoices.Amount
SQL サーバーがフィールドをグループ化しない原因は何ですか?