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 和 shippingid):

palletnbr
6

要做到这一点,我必须将我所有的台词合二为一。我想过做另一个外部应用,但它不起作用(因为我正在做另一个外部应用的外部应用)......

我想也许可以用另一种方式做我的外部应用,但我似乎不知道怎么做。我试图添加:

GROUP BY shipmentid

但它必须在 OUTER APPLY 中,我似乎不知道如何把它放在那里。

有人有什么想法可以帮助我解决这个问题吗?任何小提示都会有很大帮助!

4

2 回答 2

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吗?

于 2013-07-15T18:33:09.107 回答
0

好的,所以我已经做了我想做的事,遵循了 Gordon 的一些回答。这是我使用的代码,如果有人对我有同样的问题感兴趣的话:

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 回答