2013-07-15 64 views
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 

我想獲得(whitout一定具有ID和shipmentid):

palletnbr 
6 

要做到這一點,我將不得不把我所有的線路合而爲一。我想做另一個外部申請,但它不會工作(因爲我正在做一個外部申請的另一個外部申請)...

我想也許以另一種方式做我的外部申請,但我可以'似乎找出如何。我試圖補充:

GROUP BY shipmentid 

但它必須在外部應用程序,我似乎無法弄清楚如何把它放在那裏。

會有人有一個想法,可以幫助我解決這個問題?任何小小的提示都會有很大的幫助!

回答

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上,所以它幫助我獲得了更高的精度。當然,這不是最有效的方式,但這對我來說確實很好,因爲它在項目的一小部分中使用,因此不會被多個客戶請求(這是我們的客戶個性化主程序)。

非常感謝!

0

我意識到你的查詢可能會更復雜。在你的問題的版本似乎更容易與join回答比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理由嗎?

+0

我的querry看起來更像這樣: SELECT(...)FROM arandomtable INNER JOIN上Y X = Z INNER JOIN上Y X = Z INNER JOIN上Y X = Z INNER JOIN上Y X = Z INNER JOIN上Y = Z 左邊的X JOIN x開Y = z LEFT JOIN z on y = z OUTER APPLY(選擇SUM(palletnbr)作爲托盤FROM thepallettable GROUP BY arandomtable.ID)作爲外部托盤 WHERE(條件) – AquaSoley

+0

所以外部應用程序將是我見過的唯一方法得到我想要的。 – AquaSoley

相關問題