Gruppe durch Klausel Arbeit in einer Umgebung, aber nicht eine andere

Ich habe einen absolut verblüffenden Fall vor mir. Ich habe zwei databaseumgebungen, A und B, wo die Umgebung B aus einer Sicherung von A erstellt wurde. Ich laufe eine ziemlich einfache Abfrage:

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 

Die Abfrage gibt eine list von Benutzern zurück, die auf ihrer Rechnung einen Nicht-Null-Saldo haben. Die Ergebnisse aus Umwelt A ähneln der folgenden:

 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 

Die Ergebnisse der Umgebung B sind wie folgt:

 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 ... 

Abfrage funktioniert gut auf Umgebung A, aber es sieht so aus, als ob die GROUP BY-Klausel in der Umgebung B insgesamt ignoriert wird.

Die Abfrage funktioniert wie erwartet, wenn ich die Sum(invoices.Amount) aus der SELECT- und HAVING-Klausel kommentiere, also ist sie definitiv mit meinen invoices.Amount .

Ich habe ein A gesichert und es wiederhergestellt, und SqlDelta (ein Diff-Tool für databaseen) zeigt, dass databaseen identisch sind, also ist es kein dataproblem, es muss ein configurationsproblem sein – aber ich habe keine Ahnung wo Schau.

Im Fall ihrer relevanten, beide Umgebungen verwenden SQL server 2000 auf einem Windows server 2003. Beide Umgebungen sind auf zwei separaten servern installiert, separate Instanzen von SQL server und separate Instanzen von Windows server 2003.

Was könnte dazu führen, dass SQL-server nicht gruppieren die invoices.Amount Feld?

Versuchen Sie diese Abfrage, um das Problem in einer einfacheren Form zu reproduzieren:

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

Versuchen Sie diese Abfrage, um die Möglichkeit der Leerzeichen im Kundennamen als Grund für eine andere Gruppe zu überprüfen.

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

Es stellt sich heraus, dass es keinen Fehler mit der Abfrage gab, es war ein Umgebungsproblem. Umgebung A hatte SQL server 8.0.2039, wo Umgebung B SQL server 8.0.1053 hat. Ich habe die Umgebung B mit den neuesten Service Packs aktualisiert und jetzt meine Abfrage funktioniert wie erwartet.

Vielen Dank für Ihre Anregungen alle :), aber jetzt habe ich ein neues Problem: wer bei Microsoft für diesen Streit zu töten.

Was passiert, wenn Sie die HAVING-Klausel kommentieren, aber die Summe (Rechnungen.Amount) in der SELECT-Klausel lassen? dh können Sie überprüfen, ob die sum () – function funktioniert?

Außerdem können Sie Ihre database-sorting (oder Ihre Standard-server-sorting) überprüfen; Kollationseinstellungen können einige aggregierte functionen beeinflussen, aber zugegebenermaßen sehe ich nicht, warum es die Ergebnisse von sum () ändern würde.