我需要根据orderlineNo的不同来计算有多少orderline。每个OrderNo是不同的,但每个订单的OrderLineNo是相同的。
也就是说,一个订单上有9行,那么订单行号将从1-9开始。如果在另一个订单上有3条订单行,则它们从1-3开始
但是在orderlineno中可能没有相同的订单号-为此,我只想计算一次
例:
OrderNo OrderLineNo
987654 1
987654 2
987654 2
987654 3
987654 4
987654 5
987654 6
987654 7
此处的总订单行为7。有两条带有2的订单行,我希望只对它们进行一次计数。
使用SQL Server 2014可以做到这一点吗?
最佳答案
您可以将DISTINCT添加到COUNT:
select OrderNo, count(distinct OrderLineNo)
from tab
group by OrderNo;
或者,如果OrderLineNo始终以1开头并且无间隙地增加:
select OrderNo, max(OrderLineNo)
from tab
group by OrderNo;
编辑:
根据注释,它不是每个OrderNo的计数,而是一个全局计数。您需要使用派生表:
select count(*)
from
(select distinct OrderNo, OrderLineNo
from tab
) as dt;
要么
select sum(n)
from
(select OrderNo, max(OrderLineNo) as n
from tab
group by OrderNo
) as dt;
要么
select sum(Dist_count)
from
( select OrderNo,count(distinct OrderLineNo) as Dist_count
from Table1
group by OrderNo
) as dt