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 を得る)

問題が十分に具体的であることを願っています

ああ、すべて mysql や oracle sql ではなく、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 ごとに を 1 回だけ保存するためPO #に、PO 用に 1 つのPO_QUANTITYテーブルが必要です。SHIPPPED QUANTITYPO_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の集計として含める必要がなくなるためです。SELECT

于 2013-01-08T07:55:51.690 に答える