好的,这是我的问题:
如果PO_NUMBER相同,我需要计算一个列的添加(称之为SHIPPED_QUANTITY),然后我需要将该计算放在where语句中,以便组合的数字将显示SHIPPED_QUANTITY< PO_QUANTITY
例如
PO # PO_QUANTITY SHIPPED QUANTITY
123A 500 200
123A 500 300
123B 400 200
124A 500 500
125A 1000 500
125A 1000 500
请注意,即使PO#123B相似,它也不能包含在计算中,在这种情况下使用上面的数据,我希望123A,124A,125A不显示(因为SHIPPED QUANTITY会= PO_QUANTITY)但是我想要123B显示...所以我需要添加SHIPPED_QUANTITY,其中PO#是相同的,但只有那些唯一的(所以我不能添加123A,123A,125A,125A,等于1500,我需要123A是添加123A,125A添加到125A,分别得到500和1000)
希望问题足够具体
哦,所有必须在sql中完成,而不是mysql或oracle sql
答案 0 :(得分:1)
假设同一PO #
的所有行都具有PO_QUANTITY
(*)的相同值:
SELECT
"PO #",
MIN(PO_QUANTITY),
SUM("SHIPPED QUANTITY")
FROM
UnnamedTable
GROUP BY
"PO #"
HAVING
MIN(PO_QUANTITY) > SUM("SHIPPED QUANTITY")
(*)你应该拥有的是一张PO的表格,只有PO #
和PO_QUANTITY
以及SHIPPPED QUANTITY
的单独表格,因此您只能存储{ {1}}每个PO一次。
要将此组成一个更大的查询,我希望将上述查询作为子查询或(如果您的数据库支持它们)包含公用表表达式。
对于子查询表单,它看起来像:
PO_QUANTITY
因为这样可以避免在SELECT
* //TODO - Select columns
FROM
(
SELECT
"PO #",
MIN(PO_QUANTITY),
SUM("SHIPPED QUANTITY")
FROM
UnnamedTable
GROUP BY
"PO #"
HAVING
MIN(PO_QUANTITY) > SUM("SHIPPED QUANTITY")
) as t(PO,OrderedQuantity,TotalShipped)
//TODO - Rest of query
中包含其他列或在GROUP BY
子句中包含聚合。