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

解决方案 »

  1.   

    楼主可能碰到的是关于NUll值设置的问题,看下面例子(来自联机帮助)
      

  2.   

    SET ANSI_NULLS
    指定在对空值使用等于 (=) 和不等于 (<>) 比较运算符时,这些运算符的 SQL-92 遵从行为。
    下例使用等于 (=) 和不等于 (<>) 比较运算符对表中的 NULL 值和非空值进行比较。下例还显示 IS NULL 不受 SET ANSI_NULLS 设置的影响。-- Create table t1 and insert values.
    CREATE TABLE t1 (a int null)
    INSERT INTO t1 values (NULL)
    INSERT INTO t1 values (0)
    INSERT INTO t1 values (1)
    GO
    -- Print message and perform SELECT statements.
    PRINT 'Testing default setting'
    DECLARE @varname int
    SELECT @varname = NULL
    SELECT * 
    FROM t1 
    WHERE a = @varname
    SELECT * 
    FROM t1 
    WHERE a <> @varname
    SELECT * 
    FROM t1 
    WHERE a IS NULL
    GO
    -- SET ANSI_NULLS to ON and test.
    PRINT 'Testing ANSI_NULLS ON'
    SET ANSI_NULLS ON
    GO
    DECLARE @varname int
    SELECT @varname = NULL
    SELECT * 
    FROM t1 
    WHERE a = @varname
    SELECT * 
    FROM t1 
    WHERE a <> @varname
    SELECT * 
    FROM t1 
    WHERE a IS NULL
    GO
    -- SET ANSI_NULLS to OFF and test.
    PRINT 'Testing SET ANSI_NULLS OFF'
    SET ANSI_NULLS OFF
    GO
    DECLARE @varname int
    SELECT @varname = NULL
    SELECT * 
    FROM t1 
    WHERE a = @varname
    SELECT * 
    FROM t1 
    WHERE a <> @varname
    SELECT * 
    FROM t1 
    WHERE a IS NULL
    GO
    -- Drop table t1.
    DROP TABLE t1
    GO
      

  3.   

    WHERE T.LOT_QTY-ISNULL(QTY,0)>0-->改为WHERE isnull(T.LOT_QTY,0)-ISNULL(QTY,0)>0
    如果还有问题,建议把没有条件的数据追加到临时表中,再检查这些数据是否有问题
    SELECT * into #ttFROM  T  
         LEFT JOIN  (SELECT LOTNO, SUM(QTY) AS QTY
                                  FROM #T
                                  GROUP BY LOTNO) A 
                           ON T.LOT_NO = LOTNO
      

  4.   

    用了 wangtiecheng(不知不为过,不学就是错!) 方法--得到正確結果!
    但是還不知道是伸麼問題:)SELECT T.LOT_QTY-ISNULL(QTY,0) AS QTY 
    into #tt
    FROM  T  
         LEFT JOIN  (SELECT LOTNO, SUM(QTY) AS QTY
                                  FROM #T
                                  GROUP BY LOTNO) A 
                           ON T.LOT_NO = LOTNOSELECT * FROM #tt WHERE QTY>0
      

  5.   

    你的T表中有LOT_QTY為NULL的數據?使用這個語句察看下Select * From T Where LOT_QTY Is Null
      

  6.   

    应该是T.lot_qty也有null的情况。
      

  7.   

    应该是T.lot_qty也有null的情况。
      

  8.   

    应该是T.lot_qty也有null的情况。
      

  9.   

    --应该是T表中LOT_QTY 也有为null的数据SELECT * 
    FROM  T
    WHERE T.LOT_QTY is null
      

  10.   

    如果T表中有LOT_QTY為NULL的數據,就有可能出現這種情況。
      

  11.   

    T.LOT_QTY是numeric類型,Default 0,是不會有NULL的,而且我查過確實沒有NULL.