2017-12-12 5 views
2

は、クエリです:グループ化は、2つの行を返す代わりに、ここで予想1

SELECT xxx.NSN, xxx.CN 
    , xxx.PN 
    , xxx.[BNAME] 
    , xxx.[BTYPE] 
    , xxx.[BSYS] 
    , yyy.[BCODE] 
    , Sum(yyy.QTY) AS SumOfQTY 
    , Sum(xxx.[UNIT COST]) AS [SumOfUNITCOST] 
    , xxx.SS 
    , yyy.[Hold] 
    , yyy.[SCI] 
FROM xxx INNER JOIN yyy ON xxx.CN = yyy.CN 
WHERE xxx.PN='11' 
GROUP BY xxx.NSN, xxx.CN 
    , xxx.PN 
    , xxx.[BNAME 
    , xxx.[BTYPE] 
    , xxx.[BSYS] 
    , yyy.[BCODE] 
    , xxx.SS 
    , yyy.[Hold] 
    , yyy.[SCI] 
    , yyy.LOC 
HAVING (((yyy.[Hold]) Is Null) 
    AND ((yyy.[SCI]) Is Null) 
    AND ((yyy.LOC) != 'SHIPPED')) 
ORDER BY xxx.PN; 

そしてここでは、データが返される:

NSN CN PN BNAME BTYPE BSYS BCODE SumOfQTY SumOfUNITCOST SS Hold SCI 
----------------------------------------------------------------------------------------- 
304 CO 11 LINK AB-12 SUB  F  9   4536.00   B17 NULL NULL 
304 CO 11 LINK AB-12 SUB  F  5   2520.00   B17 NULL NULL 

今すぐデータを見て、私はに期待します結果としてこれを取得してください:

NSN CN PN BNAME BTYPE BSYS BCODE SumOfQTY SumOfUNITCOST SS Hold SCI 
----------------------------------------------------------------------------------------- 
304 CO 11 LINK AB-12 SUB  F  14   7056.00   B17 NULL NULL 

2つのグループをグループ化するのではなく、なぜそれを分離していますか?

+3

あなたは私たちに 'LOC'列を表示しません。その2つの値は異なる場合があります。 –

+2

この問題には関係しませんが、「HAVING」条件は「WHERE」に移動できます。 –

答えて

2

おそらく、レコードは異なるLOCにあると思われます。したがって、それをGROUP BYから削除してください。

次に、HAVINGの条項に対処する必要があります。おそらくあなたは意図しているでしょう:

HAVING (yyy.[Hold]) Is Null) AND 
     (yyy.[SCI]) Is Null) AND 
     SUM(CASE WHEN yyy.LOC = 'SHIPPED' THEN 1 ELSE 0 END) = 0 
+0

これはそれでした。本当にありがとう。私がそれを受け入れると、私はそれを受け入れます。アシストを感謝する、すべて。 –

関連する問題