【问题标题】:Adding rows changes the sum result with group by添加行会使用 group by 更改总和结果
【发布时间】:2021-11-19 14:30:19
【问题描述】:

如何在不改变结果的情况下添加更多列?

目前,此脚本使用总和和按订单项分组 oi.nettprice 按订单价值获取前 300 个采购订单结果,这显示了正确的结果,如下所示。

Results shown here

select top 300

oi.orderid, o.traderid, o.orderdate, 

SUM(oi.nettprice) AS nettprice

from orderitems AS oi

INNER JOIN orders AS o ON o.tradertype = 'S' AND o.id = oi.orderid 

where oi.ordertype = 'PO'
AND oi.status != 'CANCELLED'

group by
oi.orderid, o.traderid, o.orderdate

order by
nettprice DESC

添加任何其他列以显示更多信息会更改结果并更改 oi.nettprice 的总和,如下所示,我尝试使用 group by rollup 但这会在单独的行中提供值,而其他列值为空。

select top 300

oi.orderid, o.traderid,
o.orderdate, oi.partid, oi.description, oi.partrevisionid, 

SUM(oi.nettprice) AS nettprice

from orderitems AS oi

INNER JOIN orders AS o ON o.tradertype = 'S' AND o.id = oi.orderid

group by rollup 
(oi.orderid, o.traderid, o.orderdate, oi.ordertype, oi.status, oi.partid, oi.description, 
oi.partrevisionid)

HAVING oi.ordertype ='PO'
AND oi.status != 'CANCELLED'

order by
nettprice DESC

Results using Group by rollup

如何清除此问题以在不影响结果的情况下将任一表中的列包含每个采购订单的正确总计 (SUM)?

【问题讨论】:

    标签: sql group-by sum ssms ssms-2014


    【解决方案1】:

    使用 sum() 分区得到想要的结果

    SELECT top 300 oi.orderid,
           o.traderid,
           o.orderdate,
           oi.partid,
           oi.description,
           oi.partrevisionid,
           SUM(oi.nettprice) OVER(PARTITION BY oi.orderid, o.traderid, o.orderdate)  AS nettprice
    FROM orderitems AS oi
    INNER JOIN orders AS o ON o.tradertype = 'S'
    AND o.id = oi.orderid
    WHERE oi.ordertype = 'PO'
    AND oi.status != 'CANCELLED'
    ORDER BY nettprice DESC
    

    【讨论】:

    • 嗨 Vijay,这会将每个订单行的结果作为一行给出,每个结果的 ordernettprice 相同。这不会给我一个总和的前 300 名,并且能够在不影响总和结果的情况下从表中添加更多列。不过还是谢谢
    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2019-04-21
    相关资源
    最近更新 更多