1

好的,这是我的问题:

如果 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显示...所以我需要在 PO# 相同的地方添加 SHIPPED_QUANTITY,但只有那些唯一的(所以我不能添加 123A、123A、125A、125A,这将等于 1500,我需要添加 123A 和 123A , 和 125A 加到 125A 分别得到 500 和 1000)

希望问题足够具体

哦,一切都必须在 sql 中完成,而不是 mysql 或 oracle sql

4

1 回答 1

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,这样你只PO_QUANTITY为每个 PO 存储一次。


要将其组合成更大的查询,我希望将上述查询作为子查询或(如果您的数据库支持它们)包含在公用表表达式中。

对于子查询表单,它看起来像:

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 BYor 作为SELECT子句中的聚合。

于 2013-01-08T07:55:51.690 回答