日期:2014-05-19  浏览次数:20467 次

一個關于ISNULL函數的奇怪問題?
CREATE   TABLE   #T(LOTNO   INT,QTY   NUMERIC(18,   8))
......

SELECT   *   FROM     T     LEFT   JOIN     (SELECT   LOTNO,   SUM(QTY)   AS   QTY
                                                            FROM   #T
                                                            GROUP   BY   LOTNO)   A  
                                              ON   T.LOT_NO   =   LOTNO  
WHERE   T.LOT_QTY-ISNULL(QTY,0)> 0

DROP   TABLE   #T
-----------------------------
在本機運行得到一條紀錄(正確),但在客戶的電腦運行得到三條紀錄(錯誤).
本機和客戶端的數據是相同的,奇怪的是在客戶端WHERE   語句
T.LOT_QTY-ISNULL(QTY,0)> 0   不知伸麼原因不起作用,改成T.LOT_QTY-ISNULL(QTY,0)> 1000   或T.LOT_QTY-ISNULL(QTY,0) <1000...或者是刪掉都是一樣的結果.
謝謝你的寶貴意見!

------解决方案--------------------
楼主可能碰到的是关于NUll值设置的问题,看下面例子(来自联机帮助)
------解决方案--------------------
WHERE T.LOT_QTY-ISNULL(QTY,0)> 0

--> 改为

WHERE isnull(T.LOT_QTY,0)-ISNULL(QTY,0)> 0


如果还有问题,建议把没有条件的数据追加到临时表中,再检查这些数据是否有问题


SELECT *

into #tt

FROM T
LEFT JOIN (SELECT LOTNO, SUM(QTY) AS QTY
FROM #T
GROUP BY LOTNO) A
ON T.LOT_NO = LOTNO
------解决方案--------------------
你的T表中有LOT_QTY為NULL的數據?

使用這個語句察看下

Select * From T Where LOT_QTY Is Null
------解决方案--------------------
应该是T.lot_qty也有null的情况。