2017-01-20 3 views
0

SQLクエリに問題があります。 7番目の行 "OrSp_Amount!= OrSp_CompletedAmount"のWHERE句には、100%の相違点のみが表示されます(
)。MS SQL!=と<>句ですべての相違が表示されない

最初の選択は正常に動作しますが、2番目の選択では部分的な違いが示されていません。 (20-5,40-3、たとえば45-0のみ)

私は '<>'も使用しようとしましたが、何も変更されませんでした。

アイデア:)?

WITH Orders_CTE 
AS 
(
    SELECT [OrSp_ProductInWarehouseId], [OrSp_CompletedFromInvoice], [OrSp_Amount], [OrSp_TaxRate], [OrSp_CompletedAmount], OrSp_Price , 
    OrSp_OrderHeaderId , Orde_ClientId 
    FROM data.AllOrders 
    JOIN [data].[AllOrderPositions]WITH(INDEX([IX_OrSp_OrderHeaderId])) ON [Orde_Id] = [OrSp_OrderHeaderId] 
    WHERE [Orde_ShipmentDate] BETWEEN '2016-06-01' AND '2017-01-01' AND [Orde_ClientId] = 17467 AND OrSp_Amount != OrSp_CompletedAmount 
) 

    SELECT OrSp_ProductInWarehouseId, 17467 as ClientID, 
    SUM(Orders_CTE.OrSp_Price) as Price, 
    SUM(OrSp_Amount) as Amount, 
    SUM(OrSp_Price * OrSp_Amount) as TotalNetValue , 
    SUM(OrSp_CompletedFromInvoice) as CompletedFromInvoice, 
    SUM(OrSp_CompletedAmount) as CompletedAmount, 
    SUM(OrSp_Price * OrSp_CompletedFromInvoice) as CompletedValue, 
    SUM(OrSp_CompletedFromInvoice)/nullif(SUM(OrSp_Amount),0) as AmountRealizationPlaceholder, 
    SUM(OrSp_TaxRate*OrSp_Price + OrSp_Price) * SUM(OrSp_CompletedFromInvoice)/nullif(SUM((OrSp_TaxRate * OrSp_Price) + OrSp_Price),0) * SUM(OrSp_Amount) as ValueRealizationPlaceholder 
    FROM Orders_CTE JOIN [data].[Products] as Products ON Orders_CTE.OrSp_ProductInWarehouseId = Prod_Id 
    GROUP BY OrSp_ProductInWarehouseId, OrSp_OrderHeaderId 
+1

'!='は単に '<>'に代わるものです。 – jarlh

+1

https://stackoverflow.com/help/mcveを読み、編集してください! – jarlh

+2

100%の違いと部分的な違いはどういう意味ですか? 2物事は等しいか、異なっている、「差異」の度合いはない。サンプルデータを追加して、何を意味するのかを表示できますか? – HoneyBadger

答えて

1

それはフィールドOrSp_Amountの場合の値になるよう、比較演算子とNULL値をテストすることはできませんかOrSp_CompletedAmountがNULLであるので、あなたはどんな意味のある結果を得ることができません。

あなたはにWHERE句を変更しようとすることができます:

COALESCE(OrSp_Amount, 0) <> COALESCE(OrSp_CompletedAmount, 0) 
+0

まだ同じ問題があると思います。( – bazarnia

+0

最初のクエリ(* With Orders_CTE AS ... *)は正しく実行されますか? –

0

問題が解決されます。私は2番目のSELECTの結合で "LEFT"を追加することを忘れてしまい、完全な量の0より大きい値を持ついくつかのレコードは "失われました"。

関連する問題