【问题标题】:SQL Server Management Studio - Calculating Correct TotalSQL Server Management Studio - 计算正确的总计
【发布时间】:2023-03-26 15:31:01
【问题描述】:

我在 SQL Server 表中有一个列,其值如下:

ID      Value  Item#
-------------------
101     10     Apples
102     20     Apples
102-01  22     Apples
102-02  23     Apples
102-03  21     Apples
103     20     Apples
103-01  15     Apples 

如何编写查询以获得正确的值总计?

对于给定的示例,值只能用于:101102-03103-01

正确的总和应该是46

我尝试在 where 子句中使用 like 和 contains 关键字。它没有帮助。 Group by 和 Max 搞砸了总数。

仅使用 sum(values) 就可以找出所有错误

【问题讨论】:

  • 您如何确定哪些记录应计入总和?
  • 101,102-03,103-01 它应该采用项目编号,但如果前面有“-0”(例如 102-01)等,那么它应该采用其 MAX 值。所以在示例图像中只应选择 101,102-03,103-01 作为总数

标签: sql-server sum ssms greatest-n-per-group window-functions


【解决方案1】:

据我了解您的问题,您想按其 id 的前缀(前 3 个字符)对记录进行分组,并将每组后缀最高的保留记录的值相加(如果有多个记录)。

你可以使用row_number(),然后过滤和求和:

select sum(value) total_value 
from (
    select 
        t.*,
        row_number() over(partition by left(id, 3) order by id desc) rn
    from mytable t
) t
where rn = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多