我正在处理我正在处理的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中,我似乎无法弄清楚如何把它放在那里。
有人会有一个想法可以帮助我解决这个问题吗?任何一点暗示都会有很大的帮助!
答案 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
,因此它帮助我获得了更高的精确度。当然这不是最有效的方法,但在我的情况下这是好的,因为它在项目的一小部分中使用,因此不会被多个客户征求(这是我们的客户个性化)主程序)。
非常感谢!