根据来自另一列的不同值对值进行计数

Cra*_*mpo 5 sql sql-server sql-server-2014

我需要根据 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
Run Code Online (Sandbox Code Playgroud)

这里的总订单行是 7。有两个订单行为 2,我希望它们只计算一次。

使用 SQL Server 2014 可以吗?

dno*_*eth 3

您可以将 DISTINCT 添加到 COUNT:

select OrderNo, count(distinct OrderLineNo)
from tab
group by OrderNo;
Run Code Online (Sandbox Code Playgroud)

或者如果 OrderLineNo 始终从 1 开始并且无间隙地增加:

select OrderNo, max(OrderLineNo)
from tab
group by OrderNo;
Run Code Online (Sandbox Code Playgroud)

编辑:

根据评论,这不是每个 OrderNo 的计数,而是全局计数。您需要使用派生表:

select count(*)
from
 (select distinct OrderNo, OrderLineNo
  from tab
 ) as dt;
Run Code Online (Sandbox Code Playgroud)

或者

select sum(n)
from
 (select OrderNo, max(OrderLineNo) as n
  from tab
  group by OrderNo
 ) as dt;
Run Code Online (Sandbox Code Playgroud)

或者

select sum(Dist_count)
from
 ( select OrderNo,count(distinct OrderLineNo) as Dist_count
   from Table1
   group by OrderNo
 ) as dt
Run Code Online (Sandbox Code Playgroud)