我需要根据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

10-04 16:06