根据来自另一列的不同值计算值
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
所以对于每个 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
您可以将 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
我需要根据 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
所以对于每个 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
您可以将 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