2016-04-21 10 views
0

Ich habe ein sehr seltsames Problem bei der Verwendung von SSIS (Ich habe auch versucht, indem Sie eine Abfrage in SQL Server Management Studio und ich haben das gleiche Ergebnis).Wenn WHERE ValX> ValY in SSIS-Datenquelle T-SQL verwendet wird, enthält das Ergebnis Spalten ValX = ValY

Ich habe eine Abfrage, die Zeilen anzeigen sollte, in denen ein bestimmter Wert vom letzten Mal erhöht wurde. Dafür habe ich 2 Tabellen - Alt und Neu, die (wenn ich es einfach mache) ID und Wert (und einige andere Spalten, die für diesen Fall nicht wichtig sind) enthalten. Ich schließe mich diesen beiden Tabellen der ID an und vergleiche die alten und neuen Werte. Beide Spalten (Old und New) sind Float (SSIS sieht beide als DT_R8).

Lassen Sie mich Ihnen einen Einblick geben, wie die Abfrage aussieht.

SELECT n.ID, n.Val, o.Val 
FROM New as n INNER JOIN Old as o ON n.ID = o.ID 
WHERE n.Val > o.Val 

Es gibt mehrere tausend Datensätze in beide Tabellen und fast alle von ihnen gehen durch diese Abfrage und die Ergebnisse sind korrekt, aber 3 von all diesen Aufzeichnungen werden im Ergebnis falsch eingestellt. Diese 3 haben das gleiche Old.Val und New.Val (die Werte sind: 4803.2, 1336.44, 2883.25), aber sie erscheinen trotzdem in der Ergebnismenge, obwohl sie die Bedingung nicht erfüllen. Lassen Sie mich auch hinzufügen, dass diese 3 sind nicht die einzigen Datensätze mit Zahlen mit Dezimalstellen in der Menge, es gibt viele, viele mehr und all diese funktionieren gut.

Ich habe ein paar Konvertierungen versucht, aber das hat nichts geändert.

Ich habe auch verschiedene Möglichkeiten ausprobiert, um die Daten aus diesen Tabellen zu exportieren, nur um zu sehen, ob sich die Werte tatsächlich voneinander unterscheiden und die 6 (2 Paare für jede der 3 Fälle) Zahlen immer scheinen gleich zu sein. Es scheint nichts zu geben, das dem zweiten Dezimalraum folgt, egal wie ich die Daten exportiere.

Hat jemand jemals etwas Ähnliches erlebt? Ich wäre sehr dankbar für jede Art von Rat.

+0

Bitte konvertieren Sie beide Spalte zu einem gemeinsamen Datentyp in der WHERE-Klausel und überprüfen Sie das gleiche. (Beispiel * WHERE CAST (n.Val AS GELD)> CAST (o.Val AS GELD) *) –

+0

Wow, das hat das gelöst! Vielen Dank! –

Antwort

0

Bitte konvertieren Sie beide Spalten zu einem gemeinsamen Datentyp in der WHERE-Klausel und überprüfen Sie das Gleiche. Beispiel WHERE CAST(n.Val AS MONEY) > CAST(o.Val AS MONEY)

+0

Funktioniert wie ein Charme! Darf ich fragen, wie das funktioniert? Die Zahlen scheinen immer noch die gleichen (visuell) zu sein, aber der Vergleich funktioniert jetzt korrekt. –

+0

@ J.Kay, Dies kann Ihnen helfen, http://StackOverflow.com/Questions/8839460/Why-doesnt-this-sql-Query-Return-any-results-comparing-floating-point-numbers –

0

Versuchen Sie cast float-Werte zu Dezimal in Ihrem Vergleichsausdruck.