【问题标题】:SQL query to get a sum of values grouped by another columnSQL查询以获取按另一列分组的值的总和
【发布时间】:2016-10-24 15:56:43
【问题描述】:

我有这个结果:

我目前使用的查询是:

SELECT TOP 1000 [FundReportLoanDataID]
      ,[SegAmortisation]
      ,frlc.FundReportCategoryId,
      SUM(CurrentLB) AS '% of Fund'
  FROM [dbo].[FundReportLoanData] frld
  INNER JOIN [dbo].[FundReportCategories] frlc
  ON frld.SegAmortisation = frlc.Description
    group by frlc.FundReportCategoryId, frld.SegAmortisation, frld.FundReportLoanDataID, frld.LoanId, frld.CurrentLB

如您所见,虽然我按 FundReportCategoryId 进行分组,但有多个具有相同 id 的结果,但我希望根据 FundReportCategoryId 将所有结果放入一个总和结果中。

为了实现我的目标,我需要进行哪些更改?

【问题讨论】:

  • 只需从 select & group by 中删除 FundReportLoanDataID?这里有没有更复杂的东西你没有提到...
  • 这是我在你的建议后得到的i.gyazo.com/5415081ac5af1d49c2e5fee971568e12.png
  • 你能把你期望的输出放上去吗
  • 我想根据 FundReportCategoryId 将 CurrentLB 的总和作为“基金的百分比”。谢谢@j.t.
  • 当问这样的问题时,展示使用数据的例子,然后你期望什么。

标签: sql-server tsql sql-server-2012 group-by


【解决方案1】:

您尝试对CurrentLB 求和,并且在Group by 中添加了同一列,这也是重复的原因。从Group by 中删除frld.CurrentLB

您还需要从SELECTgroup by 中删除FundReportLoanDataID,因为每行的数据看起来都是唯一的。

...
group by frld.SegAmortisation, 
         frld.FundReportLoanDataID

也从Group By 中删除了frld.LoanId,因为您没有选择它,这也可能是重复的原因

【讨论】:

  • 再次输出相同的结果。
  • @Laziale - 立即查看
【解决方案2】:

如果我理解正确,您正在寻找每个 FundReportCategoryId 的百分比。如果是这样,您可以使用窗口函数

SELECT TOP 1000 [FundReportLoanDataID]
      ,[SegAmortisation]
      ,frlc.FundReportCategoryId,
      SUM(CurrentLB)/SUM(CurrentLB) OVER(PARTITION BY frlc.FundReportCategoryId ) AS '% of Fund'
  FROM [dbo].[FundReportLoanData] frld
  INNER JOIN [dbo].[FundReportCategories] frlc
  ON frld.SegAmortisation = frlc.Description
  group by frlc.FundReportCategoryId, frld.SegAmortisation, frld.FundReportLoanDataID, frld.LoanId, frld.CurrentLB

【讨论】:

  • 嗨@john 你能再写一次整个查询吗,我没有得到预期的结果
  • 这就是我得到的 列 'dbo.FundReportLoanData.CurrentLB' 在选择列表中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。
  • @Laziale 更新假设图像是你想要的,除了最后一列的百分比
  • 如您所见,我仍在为同一个 FundReportCategoryId 获得多条记录
【解决方案3】:

试试这个

    SELECT TOP 1000 
        [SegAmortisation],
        frlc.FundReportCategoryId,
        SUM(CurrentLB) AS '% of Fund'
    FROM [dbo].[FundReportLoanData] frld
    INNER JOIN [dbo].[FundReportCategories] frlc
        ON frld.SegAmortisation = frlc.Description
    GROUP BY frld.SegAmortisation, frlc.FundReportCategoryId

下次请提供您想要的输出:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-11
    • 2017-03-25
    • 1970-01-01
    • 2017-07-14
    • 2011-10-12
    • 2012-02-14
    • 2012-06-27
    • 1970-01-01
    相关资源
    最近更新 更多