根据来自另一列的不同值计算值

Counting Values based on distinct values from another Column

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

count 聚合中使用 Distinct

select count(distinct OrderLineNo) as Dist_count
from yourtable

我猜你想要这个:

SELECT OrderNo, COUNT(distinct OrderLineNo) as CntDistOrderLineNoPerOrderNo
FROM Table1
GROUP BY OrderNo

demo

所以对于每个 OrderNo 的 dictinct OrderLineNo 的计数是 7 表示 987654。

如果您想要所有不同的 OrderLineNo 的总和,如评论的那样。

WITH CTE AS
(
  SELECT OrderNo,
         MAX(OrderLineNo) as MaxOrderLineNoPerOrderNo
  FROM Table1
  GROUP BY OrderNo
)
SELECT SUM(MaxOrderLineNoPerOrderNo) AS SumOrderLineNoPerOrderNo
FROM CTE

Demo

您可以将 DISTINCT 添加到 COUNT:

select OrderNo, count(distinct OrderLineNo)
from tab
group by OrderNo;

或者如果 OrderLineNo 总是从 1 开始并且没有间隙地增加:

select OrderNo, max(OrderLineNo)
from tab
group by OrderNo;

编辑:

根据评论,这不是每个订单号的计数,而是全局计数。您需要使用 Derived Table:

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

没有distinct的解决方案,但是需要应用group by两次:

select orderNo , count(*) from
  (select orderNo from tbl group by orderNo,orderlineNo) t1 group by orderNo