我正在处理一个查询,以显示一天内发送的订单总数和发送的项目数量。由于有大量的连接,我有重复的行。它看起来是这样的:
DispatchDate Order Qty
2019-07-02 1 2
2019-07-02 1 2
2019-07-02 1 2
2019-07-02 2 2
2019-07-02 2 2
2019-07-02 2 2
2019-07-02 3 5
2019-07-02 3 5
2019-07-02 3 5
我使用这个查询:
SELECT DispatchDate, COUNT(DISTINCT Order), SUM(DISTINCT Qty)
FROM TABLE1
GROUP BY DispatchDate
显然,在这一天有3个订单,项目总数为9
但是,查询将返回:
3个订单和7个项目
我不知道如何解决这个问题。如何对每个订单的数量求和,而不是像sum DISTINCT那样简单地从一列中删除重复项
发布于 2019-07-02 17:05:21
可以进行CTE
with cte1 as (
SELECT Order AS Order
, DispatchDate
, MAX(QTY) as QTY
FROM FROM TABLE1
GROUP BY Order
, DispatchDate
)
SELECT DispatchDate
, COUNT(Order)
, SUM(Qty)
FROM cte1
GROUP BY DispatchDate
发布于 2019-07-02 19:15:11
如果数据以这种方式存储,那么您的数据模型就有很大的问题。如果是这样的话,您需要一个每个订单一行的表。
如果这是查询的结果,您可能可以修复底层查询,这样就不会得到重复的结果。
如果您需要使用这种格式的数据,则为每个组提取一行。我认为row_number()
非常适合用于此目的:
select count(*), sum(qty)
from (select t.*, row_number() over (partition by dispatchdate, corder order by corder) as seqnum
from t
) t
where seqnum = 1
Here是一个db<>fiddle。
发布于 2019-07-02 17:06:59
首先,您应该避免在链接时重复使用行。例如,使用LEFT JOIN代替JOIN。但是,正如我们所处的那样:
SELECT DispatchDate, sum( Qty)
FROM (
SELECT distinct DispatchDate, Order, Qty
FROM TABLE1 )T
GROUP BY DispatchDate
您输入了SUM(DISTINCT Qty),它将Qty的不同值相加,即2和5。这是7,不是吗?
https://stackoverflow.com/questions/56848617
复制相似问题