Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 按多个位置的和()进行筛选_Sql Server_Group By_Sum_Filtering - Fatal编程技术网

Sql server 按多个位置的和()进行筛选

Sql server 按多个位置的和()进行筛选,sql-server,group-by,sum,filtering,Sql Server,Group By,Sum,Filtering,我需要构建一个查询,返回order\u ID按SUM(函数)过滤 假设我只需要在“笔”、“铅笔”和“橡皮擦”之和等于或大于15时过滤下面的数据。换句话说,我需要排除“stamp”和“frames”。我想我需要按订单号分组 order_ID |article_ID | QTY | ---------------------------- 1 | pen | 5 | 1 | pencil | 5 | 1 | eraser |

我需要构建一个查询,返回order\u ID按SUM(函数)过滤

假设我只需要在“笔”、“铅笔”和“橡皮擦”之和等于或大于15时过滤下面的数据。换句话说,我需要排除“stamp”和“frames”。我想我需要按订单号分组

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  |

我希望只得到订单_ID=1,因为2和3都不符合我的条件。你能帮我吗?

聚合后过滤应该可以

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

您可以使用条件聚合,如下所示:

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 

根据您的输入,将返回订单id 1和3,仅返回订单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

为什么你不能得到订单号3,因为它的笔和铅笔=15?和Tab Alleman的评论一样。这是否意味着“笔”、“铅笔”和“橡皮擦”都必须有一个记录?