0

作業中の SQL リクエストに問題があります。

特定の顧客が注文した特定のアイテムの合計数を返したいです。問題は、リクエストを実行すると複数の行が表示されることです。

(これは、コードの理解を助けるための私の要求の非常に単純化されたバージョンであることに注意してください。私のテーブルも、私の行も、このように命名されていません。 )

SELECT outerpallet.pallet as palletnbr, ID, shipmentID FROM arandomtable
OUTER APPLY (SELECT SUM(palletnbr) as pallet FROM thepallettable GROUP BY arandomtable.ID) as outerpallet
WHERE ID = @something

私が得るもの:

palletnbr  ID    shipmentid
1          2     340
2          3     340
3          4     340 

私が取得したいもの(必ずしもIDとshipidを持っていない場合):

palletnbr
6

これを行うには、すべての行を 1 つにまとめる必要があります。別の外部適用を行うことを考えましたが、うまくいきません(別の外部適用の外部適用を行っているため)...

別の方法で外部適用を行うことを考えましたが、方法がわかりません。追加しようとしました:

GROUP BY shipmentid

しかし、それは OUTER APPLY にある必要があり、そこに置く方法がわかりません。

この問題を解決するのに役立つアイデアはありますか? どんな小さなヒントでも大いに役立ちます!

4

2 に答える 2

0

さて、ゴードンの答えに少し従い、やりたいことをやるようになりました。私が持っていたのと同じ質問を持つ誰かに興味があるなら、これは私が行ったコードです:

SELECT outerpallet.pallet as palletnbr, ID, shipmentID FROM arandomtable
--(here are all of my other join that do not affect the question)
OUTER APPLY (SELECT SUM(palletnbr) as pallet 
FROM thepallettable 
INNER JOIN shipmenttable ON shipmenttable.shipmentid = thepallettable.shipmentid
INNER JOIN shipmentdetail ON shipmenttable.shipmentid = shipmentable.shipmentdtlid
GROUP BY shipmentdetail.ID) as outerpallet
WHERE ID = @something

これは非常に短縮された基本的なバージョンですが、行き詰まっている人を助けるかもしれません. 私は基本的にINNER JOIN自分の に他のものを付けOUTER APPLYたので、精度を高めるのに役立ちました. 確かにこれは最も効果的な方法ではありませんが、プロジェクトのごく一部で使用されたため、私の場合はこれで問題ありませんでした。したがって、複数の顧客から要求されることはありませんでした (これは、メインプログラム)。

どうもありがとうございました !

于 2013-07-16T19:33:41.677 に答える
0

あなたのクエリはもっと​​複雑かもしれません。joinあなたの質問のバージョンは、よりもa の方が簡単に答えられるようですcross apply:

SELECT SUM(palletnbr) as palletnbr, arandomtable.ID, arandomtable.shipmentID
FROM arandomtable left outer join
     thepallettable 
     on thepallettable.randomID = arandomtable.ID
WHERE arandomtable.ID = @something
group by arandomtable.ID, arandomtable.shipmentID;

必要な理由はありcross applyますか?

于 2013-07-15T18:33:09.107 に答える