2016-04-20 47 views
1

enter image description hereMySQL的 - 查詢使用分組條件

嗨,

我有錶行像上面的圖片,我想總結的所有行的數量,但我需要排除排在那裏AISLE = POS和數量< 0在同一行上。

我做了一些嘗試得到我想要什麼,但我不能找到解決辦法:

SELECT 
    ROUND(SUM(QTY), 
    2) AS INVENTORY 
FROM 
    INV_QTY_LOCATION 
WHERE 
    PRODUCT = 143459 AND AISLE != 'PHY' AND AISLE != 'RET' AND case when AISLE = 'POS' AND QTY > 0 

闖闖

SELECT 
    ROUND(SUM(QTY), 
    2) AS INVENTORY 
FROM 
    INV_QTY_LOCATION 
WHERE 
    PRODUCT = 143459 AND AISLE != 'PHY' AND AISLE != 'RET' AND (AISLE = 'POS' AND QTY > 0) 

在這種特殊情況下的結果應該是161

解決方案

SELECT 
    ROUND(
    SUM(
     CASE WHEN(AISLE = 'POS' AND QTY > 0) OR AISLE != 'POS' THEN QTY ELSE 0 
    END 
), 
    2 
) AS INVENTORY 
FROM 
    INV_QTY_LOCATION 
WHERE 
    PRODUCT = 143459 AND AISLE != 'PHY' AND AISLE != 'RET' 
+0

會發生什麼事,當你運行你的代碼? –

回答

2

我要指出, NOT IN將是該查詢有所幫助:

WHERE PRODUCT = 143459 AND 
     AISLE NOT IN ('PHY', 'RET') AND 
     (AISLE <> 'POS' OR QTY > 0) 

注:這是假定AISLE我從來沒有NULL

,或者:

WHERE PRODUCT = 143459 AND 
     AISLE NOT IN ('PHY', 'RET') AND 
     NOT (AISLE = 'POS' AND QTY > 0) 
1

你的第二個說法幾乎是正確的,但因爲你正在嘗試「排除AISLE = POS」,那麼就應該是AISLE <> 'POS'

SELECT 
    ROUND(SUM(QTY), 
    2) AS INVENTORY 
FROM 
    INV_QTY_LOCATION 
WHERE 
    PRODUCT = 143459 AND AISLE != 'PHY' AND AISLE != 'RET' AND (AISLE <> 'POS' OR QTY > 0) 
+0

這是不好的,因爲如果行與AISLE = POS是> 0我需要包括這一行。使用AISLE = POS的查詢行始終是排除的。 –

+0

感謝您的澄清,我已經更新了我的答案,並且包含'AND(AISLE <>'POS'或QTY> 0)'。但是,你應該檢查出[** @ Gordon Linoff **的答案](http://stackoverflow.com/questions/36754667/mysql-query-with-grouped-conditions/36754793#36755078),因爲我認爲它更好比我的。 –

0

嘗試使用

AND (AISLE <> 'POS' OR QTY >= 0)