我需要根据订单行不同来计算有多少订单项。每个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是否可行。
答案 0 :(得分:2)
我想你想要这个:
SELECT OrderNo, COUNT(distinct OrderLineNo) as CntDistOrderLineNoPerOrderNo
FROM Table1
GROUP BY OrderNo
因此,对于每个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
答案 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