外部适用于另一个外部申请?

时间:2013-07-15 18:04:03

标签: sql sql-server join outer-join

我正在处理我正在处理的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

但它必须在OUTER APPLY中,我似乎无法弄清楚如何把它放在那里。

有人会有一个想法可以帮助我解决这个问题吗?任何一点暗示都会有很大的帮助!

2 个答案:

答案 0 :(得分: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吗?

答案 1 :(得分: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,因此它帮助我获得了更高的精确度。当然这不是最有效的方法,但在我的情况下这是好的,因为它在项目的一小部分中使用,因此不会被多个客户征求(这是我们的客户个性化)主程序)。

非常感谢!