【问题标题】:How to select all records where sum of one of fields for these records equals specified value [duplicate]如何选择这些记录的字段之一的总和等于指定值的所有记录[重复]
【发布时间】:2017-11-29 11:09:45
【问题描述】:

请您帮忙创建下一个查询:

我有桌子

  ID             Amount     Name    
 -----------------------------------
   1              100       Name1                
   2              50        Name2
   3              60        Name3
   4              10        Name4
   5              70        Name5
   6              10        Name6

我需要选择金额总和 = 70 的任何集合中的所有记录

以下任何结果都会正确

1.

  ID             Amount     Name    
 -----------------------------------
   5              70        Name5

2.

  ID             Amount     Name    
 -----------------------------------
   2              50        Name2
   4              10        Name4
   6              10        Name5

3.

  ID             Amount     Name    
 -----------------------------------
   3              60        Name3
   6              10        Name6

4.

  ID             Amount     Name    
 -----------------------------------
   3              60        Name3
   4              10        Name4

谢谢

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    我想处理第一个结果

    SELECT MAX(ID) [ID], SUM(Amount) [Amount], Name FROM <table>
        GROUP BY Name HAVING SUM(Amount) = 70
    

    编辑:窗口函数的使用

    select ID, Amount, Name from
    (
        select ID, 
           Amount,
          Name,
          SUM(Amount) OVER (ORDER BY ID ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) [Sum] from <table>
    ) a where Sum = 80
    

    【讨论】:

    • 抱歉,没有。如果我使用 80 而不是 70 - 它应该是 ID 为 3、4、6 的记录集。但在这种情况下,您的查询不会返回任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2015-04-24
    相关资源
    最近更新 更多