【问题标题】:How to group two lines into one line and sum the amount when use union使用联合时如何将两行分组为一行并求和
【发布时间】:2012-01-26 01:01:53
【问题描述】:

我在我的 SQL 脚本中使用 union 并得到下面的数据,我的问题是如何将第 3 行和第 4 行分组成为第 0 行并总结第 3 和第 4 行的金额。提前谢谢!!

发件人:
单据行金额

    11000003    1   20.6    
    11000003    2   55  

    11000003    3   55  
    11000003    4   20.6

收件人:
单据行金额

    11000003    1   20.6    
    11000003    2   55  

    11000003    0   75.6    

这是我的脚本:

Select Document, Row_number () Over (Partition by DocumentNumber Order by DocumentNumber as Line, Amount
From Table A 

Union 

Select Document, Row_number () Over (Partition by DocumentNumber Order by DocumentNumber as Line, Amount
from Table A

但我想编辑联合结果以符合我的要求,即仅将其分组到一行并总结金额

【问题讨论】:

  • 向我们展示一些 SQL。我们可以一般性地回答,但可能对您没有帮助...
  • 第 3 行和第 4 行应该按照哪个标准进行分组?
  • 它们总是第 3 行和第 4 行,其他第 1 行和第 2 行吗?我们看不到您的查询,因此我们目前提供的任何内容都是猜测。
  • 我已经标记了您提供的代码,但它显然不是您的真实代码,因为您的ROW_NUMBER() 函数不完整。我们试图了解您的问题,但如果您发布损坏的代码、不提供良好的示例数据等,那么我们可以提供的建议将受到限制。

标签: sql-server-2005


【解决方案1】:

像这样:

SELECT Document, SUM(Line), SUM(Amount)
FROM tablename
GROUP BY Document

【讨论】:

  • 这会产生一个结果行,我不知道你从哪里得到 SUM(Line)。
  • 实际上该行是由Row_number生成的,我无法选择它
  • 这是我的脚本: Select Document, Row_number () Over (Partition by DocumentNumber Order by DocumentNumber as Line, Amount from Table A Union Select Document, Row_number () Over (Partition by DocumentNumber Order by DocumentNumber as行,也来自表 A 的金额,但我想编辑联合结果以符合我的要求,即仅将其分组到一行并总结金额
【解决方案2】:

实际上仅适用于您提供的数据的一个示例是:

SELECT Document,Line,Sum(Amount)
FROM
   (SELECT Document,CASE Line WHEN 3 THEN 0 WHEN 4 THEN 0 ELSE Line END as Line,Amount
   FROM
      (<Your current query>) t
   ) t
GROUP BY Document,Line

但我无法知道这是否符合您更广泛的需求,因为您还没有给出太多规范。

【讨论】:

  • @user1111569 - 编辑您的问题,并在那里添加您的脚本。不要尝试将其发布在评论中(您将无法将其格式化为代码(但您应该在编辑问题时对其进行格式化))
  • 这是我的脚本: Select Document, Row_number () Over (Partition by DocumentNumber Order by DocumentNumber as Line, Amount from Table A Union Select Document, Row_number () Over (Partition by DocumentNumber Order by DocumentNumber as行,也来自表 A 的金额,但我想编辑联合结果以符合我的要求,即仅将其分组到一行并总结金额
  • @user1111569 - 正如我预测的那样,代码在 cmets 中是不可读的(除其他外,它似乎不完整,包含更多的左括号(()而不是右括号)。请编辑您的问题,在其中添加您的脚本,使用代码格式化工具({} 按钮),并检查预览是否正确。
猜你喜欢
  • 2022-12-18
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-19
相关资源
最近更新 更多