0

我有一张如下表:

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

我需要计算不同订单序列号的数量,其中单位在订单序列号中不相等。一个订单中的 Sku 组合可能比我提到的要多,但最终目标是获得与各种 SKU 对应的单位(按该顺序)不相等的订单。

在上述情况下,我应该得到 1 的答案,因为 ordererialno 1234-6789 有不同的单位。

谢谢

4

2 回答 2

2

这是一个相对简单的GROUP BY查询:

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

这会给你所有对(Orderserialno, Units)。要投影Units,请将此查询嵌套在 aDISTINCT中,如下所示:

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

如果您只需要具有多个单位的 s 的总数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 回答