如果SQL中的ID相同,如何从一列添加数据

时间:2013-01-08 07:52:21

标签: sql

好的,这是我的问题:

如果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

1 个答案:

答案 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子句中包含聚合。