2017-06-12 129 views
-2

我需要構建一個查詢,它返回SUM(函數)的order_ID篩選。通過多個wheres SUM()篩選

讓我說只有當「筆」,「鉛筆」和「橡皮擦」的總和等於或大於15時,我需要過濾下面的數據。換句話說,我需要排除「郵票」和「框架」 。我想我需要GROUP BY ORDER_ID

order_ID |article_ID | QTY | 
---------------------------- 
    1  | pen  | 5 | 
    1  | pencil | 5 | 
    1  | eraser | 5 | 
    1  | stamp  | 3 | 
    1  | frames | 3 | 
    2  | pen  | 3 | 
    2  | pencil | 5 | 
    2  | eraser | 5 | 
    3  | pen  | 5 | 
    3  | pencil | 10 | 

我希望得到的只有ORDER_ID = 1,因爲兩個2和3是出於我的條件。你能幫我嗎?

+0

爲什麼你會不會得到ORDER_ID 3,因爲它有鋼筆和鉛筆= 15? –

+0

與Tab Alleman相同。這是否意味着每筆「筆」,「鉛筆」和「橡皮」都必須有記錄? – ZunTzu

回答

1

郵政聚合過濾應該這樣做。

SELECT order_id FROM t 
WHERE article_id IN("pen", "pencil", "eraser") 
GROUP BY order_id 
HAVING SUM(QTY)>=15 
0

你可以使用如下條件彙總:

Select order_id from #yourorder group by order_id 
having sum(case when article_id in ('pen','pencil','eraser') then qty else 0 end) >= 15 
0

根據你輸入的ORDER_ID 1 & 3將被退回,只有ORDER_ID 1

只有當「筆」,「鉛筆」和「橡皮擦」的總和等於或大於 比15

爲下一個演示: -

Create table mytable (order_ID int , article_ID varchar(20),QTY int) 
insert into mytable values 
(1,'pen',5), 
(1,'pencil',5), 
(1,'eraser',5), 
(1,'stamp',3), 
(1,'frames',3), 
(2,'pen',3), 
(2,'pencil',5), 
(2,'eraser',5), 
(3,'pen',5), 
(3,'pencil',10) 

select order_ID,sum(QTY) SumQty 
from mytable 
WHERE article_id IN('pen','pencil','eraser') 
group by order_ID 
having sum(QTY) => 15 

輸出: -

order_ID SumQty 
    1   15 
    3   15