在出产系统中,一个大订单凡是会拆分为良多的小订单,每个订单的数目都不不异,那么,若何才能在订单明细表中,按照订单号,对总的订单数目进行筛选呢?
建立一个姑且表,用于演示sqlserver数据库中,若何在订单表上,先分类统计,然后再次筛选数据
IF OBJECT_ID('tempdb..#tblOrder') IS NOT NULL DROP TABLE #tblOrder;
CREATE TABLE #tblOrder(
OrderID varchar(50), -- 订单号
OrderLine int, -- 订单行号
OrderTotal int -- 订单数目
);
往姑且表中1插入几行测试数据,模订定单数据,此处假设是订单明细数据,所以订单号是可以反复的
insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00001', 1, 1000);
insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00001', 2, 2000);
insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00001', 3, 3000);
insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00002', 1, 4000);
insert into #tblOrder(OrderID, OrderLine, OrderTotal) values('PO00003', 1, 5000);
查询姑且表1中的测试数据
select * from #tblOrder;
按照订单号汇总所有的数目,这个时辰就需要利用到group by分组语句,以及sum统计函数
select '订单号' = OrderID, '总数目' = sum(OrderTotal)
from #tblOrder
group by OrderID
在汇总完当作订单数目的根本上,若何筛选出总订单数跨越4000的订单号以及数目呢?最简单的体例就是,嵌套SQL,再次筛选,实现体例如下
select '订单号' = tmp.OrderID, '总数目' = tmp.OrderTotal
from(
select OrderID, OrderTotal = sum(OrderTotal)
from #tblOrder
group by OrderID
)tmp
where tmp.OrderTotal > 4000
固然,上面的SQL也实现了需求,可是,看起来SQL语句较多。若何才能不利用嵌套SQL呢?先看下面的SQL,概况上看起来,有点像这么回事,可是,现实却达不到结果。下面的SQL统计的是,订单明细数目大于4000的值汇总,而不是总订单数目大于4000的订单数目汇总
select '订单号' = OrderID, '总数目' = sum(OrderTotal)
from #tblOrder
where OrderTotal > 4000
group by OrderID
当现实营业再复杂一些,获取的字段再多一些的时辰,不想利用嵌套SQL的时辰,就可以利用having语句了
select '订单号' = OrderID, '总数目' = sum(OrderTotal)
from #tblOrder
group by OrderID
having sum(OrderTotal) > 4000
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!