比较同一列中的2个值

时间:2013-05-07 01:36:05

标签: sql

我有一张如下表:

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

我需要得到不同的orderserialno的计数,其中单位在ordererialno中不相等。 Sku的顺序可能比我提到的更多,但最终的目标是获得那些与各种SKU(按此顺序)相对应的单位不相等的订单。

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

由于

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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