1

私はここで完全に困惑しています。他の場所で答えを見落としていないことを願っています。

私は2つのテーブルを持っていassetますpurchase_order.

資産

asset_key | description | purchase_order_key

注文書

purchase_order_key | order_number | number_of_assets

それぞれが次の基準を満たしている注文書のリストを取得しようとしています。

  • 指定された purchase_order_key を持つ資産テーブル内の行の総数は、その purchase_order_key を持つ purchase_order 行の number_of_assets 値よりも少なくなっています。

たとえば、assetテーブルに同じpurchase_order_key(24) の 4 つの行と、異なるpurchase_order_key(66) の 17 の項目があるとします。purchase_order24 が 4number_of_assetsをリストし、purchase_order66 が 19 をリストする場合、クエリは 24ではなく 66number_of_assetsを返す必要があります。purchase_orderpurchase_order

4

3 に答える 3

1

COUNTPO テーブルにassets結合して、記録された資産数と比較する必要があります。

SELECT PO.purchase_order_key, COUNT(A.purchase_order_key)
FROM purchase_order PO
    LEFT JOIN asset A ON PO.purchase_order_key = A.purchase_order_key
GROUP BY PO.purchase_order_key, PO.number_of_assets
HAVING COUNT(*) > PO.number_of_assets
于 2013-11-01T20:09:30.437 に答える
1

サブクエリを使用できます。

SELECT *
FROM purchase_order
WHERE number_of_assets > (
    SELECT COUNT(*)
    FROM asset
    WHERE asset.purchase_order_key = purchase_order.purchase_order_key
)
于 2013-11-01T20:08:12.093 に答える
0

これがあなたが探しているものだと思います:

SELECT
    PO.*
FROM
    purchase_order PO
    INNER JOIN
        (
            SELECT 
                A.purchase_order_key,
                COUNT(A.asset_key) asset_key_count
            FROM
                asset A
            GROUP BY
                A.purchase_order_key

        ) AC on AC.purchase_order_key = PO.purchase_order_key and AC.asset_key_count < PO.number_of_assets
于 2013-11-01T20:17:01.657 に答える