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

时间:2015-07-17 14:28:48

标签: sql sql-server sql-server-2014

我需要根据订单行不同来计算有多少订单项。每个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是否可行。

4 个答案:

答案 0 :(得分:2)

我想你想要这个:

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

demo

因此,对于每个OrderNo dictinct OrderLineNo的计数,对于987654,这是7。

如果你想要所有不同的OrderLineNo的总和作为评论。

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

Demo

答案 1 :(得分:1)

您可以将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

答案 2 :(得分:0)

git flow init 汇总

中使用Distinct
count

答案 3 :(得分:0)

没有明显的解决方案,但需要两次应用group by

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