2016-04-21 18 views
0

使用SSIS時我遇到了一個非常奇怪的問題(我也嘗試過在SQL Server Management中編寫查詢工作室和我得到了同樣的結果)。在SSIS數據源T-SQL中使用WHERE ValX> ValY時,結果中包含ValX = ValY的列VALD

我有一個查詢應該顯示其中某個值從上次增加的行。爲此,我有2個表格 - 舊的和新的,它們(如果我簡單的話)包含ID和值(以及其他對這種情況不重要的列)。我加入這兩個表中的ID並比較舊值和新值。兩列(舊的和新的)都是浮動的(SSIS將它們視爲DT_R8)。

讓我來看看查詢的樣子。

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 

有幾千條記錄在兩個表和幾乎所有的人都要經過這個查詢,結果是正確的,但在所有這些記錄3出現在結果中設置不正確。這3個參數具有相同的Old.Val和New.Val(值分別爲:4803.2,1336.44,2883.25),但它們仍然出現在結果集中,儘管它們不符合條件。我還要補充一點,這3個並不是唯一帶有小數位數的記錄,還有很多很多,所有這些工作都很好。

我已經嘗試了幾次轉換,但沒有任何改變。

我也嘗試過從這些表中導出數據的幾種方法,以查看這些值是否實際上彼此不同,並且以任何方式我都這樣做,這6個(每個3個案例都有2對)數字總是似乎是平等的。無論如何導出數據,在第二個小數位後面都不會出現任何內容。

有沒有人遇到類似的東西?我會非常感謝任何建議。

+0

請將兩列轉換爲WHERE子句中的公共數據類型並檢查相同。 (示例* WHERE CAST(n.Val AS MONEY)> CAST(o.Val AS MONEY)*) –

+0

哇,那就解決了!謝謝! –

回答

0

請將這兩列轉換爲WHERE子句中的通用數據類型並檢查相同。 樣本WHERE CAST(n.Val AS MONEY) > CAST(o.Val AS MONEY)

+0

工程就像一個魅力!我可以問一下這是如何工作的嗎?數字看起來仍然相同(視覺上),但比較現在可以正常工作。 –

+0

@ J.Kay,這可能對你有幫助,http://stackoverflow.com/questions/8839460/why-doesnt-this-sql-query-return-any-results-comparing-floating-point-numbers –

0

嘗試cast將比較表達式中的浮點值更改爲小數。