2013-05-07 15 views
0

比較2點的值我有一個表像下:在同一列

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

我需要得到不同orderserialno的計數各單位是不是orderserialno內相等。 Sku's的組合可能比我提到的要多,但最終的目標是獲得與各SKU(按此順序)相對應的單位不相等的訂單。

在上述情況下,我應該得到的答案爲1,因爲orderserialno 1234-6789有不同的單位。

感謝

回答

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 
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 s的多臺設備的總數,取代DICTINCT(Orderserialno)COUNT(DICTINCT Orderserialno)