0

次のようなテーブルがあります。

  Orderserialno SKU  Units
  1234-6789     2x3   5
  1234-6789     4x5   7
  1334-8905     4x5   2
  1334-8905     6x10  2

オーダーシリアル番号内でユニットが等しくない個別のオーダーシリアル番号の数を取得する必要があります。注文には、私が言及したよりも多くの Sku の組み合わせが存在する可能性がありますが、最終的な目標は、さまざまな SKU に (その順序で) 対応するユニットが等しくない注文を取得することです。

上記の場合、orderserialno 1234-6789 の単位が異なるため、1 と回答する必要があります。

ありがとう

4

2 に答える 2

2

これは比較的単純なGROUP BYクエリです。

SELECT Orderserialno, Units
FROM MyTable
GROUP BY Orderserialno, Units
HAVING COUNT(1) > 1

これにより、すべてのペアが得られます(Orderserialno, Units)。を射影するには、次のように、Unitsこのクエリを 内にネストします。DISTINCT

SELECT DICTINCT(Orderserialno) FROM (
    SELECT Orderserialno, Units
    FROM MyTable
    GROUP BY Orderserialno, Units
    HAVING COUNT(1) > 1
)

Orderserialno複数のユニットを持つ の合計数のみが必要な場合は、 に置き換えDICTINCT(Orderserialno)ますCOUNT(DICTINCT Orderserialno)

于 2013-05-07T01:40:04.217 に答える
0

このような注文番号のリストを取得するには、集計クエリを使用します。

select OrderSerialNo
from t
group by OrderSerialNo
having min(Units) <> max(Units)

これはトリックを使用して、units値が変化するかどうかを確認します。を使用できますcount(distinct)が、通常はパフォーマンスのオーバーヘッドが発生します。代わりに、最小値と最大値を比較してください。それらが異なる場合、値は一定ではありません。

カウントを取得するには、これをサブクエリとして使用します。

select count(*)
from (select OrderSerialNo
      from t
      group by OrderSerialNo
      having min(Units) <> max(Units)
     ) t
于 2013-05-07T01:38:57.850 に答える