【问题标题】:group by sum with Every Sum group ending last Rows using Sql server使用 Sql 服务器按总和分组,每个总和组结束最后一行
【发布时间】:2018-06-25 06:16:26
【问题描述】:

我已经附加了一个图像,我想要 7800-2000=5800,基于使用 sql server 查询的组最后一行总和

我想要这样的输出

GroupName     Credit    Debit   DrCrEffect  UnderGroupName  Total
Opening Balance 0.00    0.00    Dr         Master Group      NULL
Opening Stock   0.00    0.00    Dr         Opening Stock     NULL
Purchase        0.00    7800.00 Dr         Purchase          0.00 
Purchase Return 2000.00  0.00   Dr          Purchase         5800

查询:

SELECT MAG.GroupName,
    SUM(isnull(tm.Credit,0.00))Credit,
    SUM(ISNULL(TM.Debit,0.00))Debit,
    mag.DrCrEffect,
    MAG.UnderGroupName,
    SUM(TM.Credit-tm.Debit)Total
FROM dbo.Mst_Account_Group MAG
    LEFT JOIN  dbo.Party P ON MAG.Mst_Account_Group_Id = P.Mst_Account_Group_Id 
        AND mag.EffectTo='Trading Account' AND MAG.DrCrEffect='dr'
    LEFT JOIN  dbo.Transaction_Master TM ON tm.Ledger_Id=p.Party_Id
WHERE P.Company_Id=1 AND P.Branch_Id=1
GROUP BY mag.GroupName, mag.DrCrEffect, MAG.UnderGroupName 

【问题讨论】:

  • 不要使用图片 - 我不明白你想要什么?你能写出预期的结果吗?
  • thomas 我想要最后一行的每个 undergroupby 的总和,我还附上了你知道的屏幕截图
  • @alpeshramani 你没有提到你面临的问题是什么?你的预期结果是什么?在那之前,没有人会帮助你。
  • 但这将出现在每个分组中,因此您将在所有购买分组中获得 5800 -
  • Jibin Balachandran 我想要每个 undergroupby 行与最后一组行的总和,如我红色所示

标签: sql sql-server group-by tradingview-api


【解决方案1】:

您可以使用LAG 函数来实现这一点。 LAG 将为您提供当前行选择中上一行的值。

declare @table table (groupname varchar(50),
                      credit numeric(18,2),
                      debit numeric(18,2),
                      drcreffect varchar(50),
                      undergroup varchar(50))

insert into @table values
('Opening Balance', 0.00   , 0.00    ,'Dr',  'Master Group'   ),
('Opening Stock',   0.00   , 0.00    ,'Dr',  'Opening Stock' ),
('Purchase',        0.00   , 7800.00 ,'Dr',  'Purchase'),
('Purchase Return', 2000.00,  0.00   ,'Dr',  'Purchase')


select groupname,
       credit,
       debit,
       drcreffect,
       undergroup, 
       LAG(debit,1,0) OVER (ORDER BY groupname)-credit AS Total
from @table

输出:

注意:@table 替换为您的实际表名。

更新:

declare @table table (groupname varchar(50),
                      credit numeric(18,2),
                      debit numeric(18,2),
                      drcreffect varchar(50),
                      undergroup varchar(50))

insert into @table values
('Opening Balance', 0.00   , 0.00    ,'Dr',  'Master Group'   ),
('Opening Stock',   0.00   , 0.00    ,'Dr',  'Opening Stock' ),
('Purchase',        0.00   , 7800.00 ,'Dr',  'Purchase'),
('Purchase Return', 2000.00,  0.00   ,'Dr',  'Purchase'),
('Purchase Return', 3000.00, 0.00 ,'Dr', 'Purchase'),
('Sales', 0.00, 5000.00 ,'Dr', 'Sales'),
('Sales Return', 2000.00,  0.00   ,'Dr',  'Sales'),
('Sales Return', 2000.00, 0.00 ,'Dr', 'Sales')


SELECT groupname,credit,debit,drcreffect,undergroup, LAG(debit,1,0) OVER (ORDER BY groupname)-credit AS Total from (
SELECT DISTINCT groupname,SUM(credit) OVER(PARTITION BY groupname) AS Credit,SUM(debit) OVER(PARTITION BY groupname) AS debit,drcreffect,undergroup
FROM @table ) X

【讨论】:

  • 插入@table 值 ('期初余额', 0.00 , 0.00 ,'Dr', 'Master Group' ), ('期初股票', 0.00 , 0.00 ,'Dr', '期初股票' ), ('采购', 0.00 , 7800.00 ,'博士', '采购'), ('采购退货', 2000.00, 0.00 ,'博士', '采购'), ('采购退货', 2000.00, 0.00 , 'Dr', 'Purchase') 请添加此结果并检查您的逻辑是否正确。但是再购买一次退货添加 2000 和结果是 3800 但发出一些逻辑
  • 是的,查询已准备就绪,但再购买一次退货,添加 5800 并再次购买退货 2000,因此输出 5800 的 3800 最终值,但不是请帮助我
  • 再次添加 ('Purchase Return', 3000.00, 0.00 ,'Dr', 'Purchase') 和现在的值 (7800-2000-3000) 最终总和组 =2800
  • 如果您添加('Purchase Return', 3000.00, 0.00 ,'Dr', 'Purchase'),您将获得-3000.00 作为该行的总数,即0.00 - 3000.00= -3000.00(上一行的借方 - 贷方)
  • 我附上了完整的例子,添加了一个新的回报,再加上一个组群名称贷方借方 drcreffect 下组总期初余额 0.00 0.00 Dr Master Group 0.00 期初股票 0.00 0.00 博士期初股票 0.00 购买 0.00 7800.00 博士购买 0.00 购买回报2000.00 0.00 Dr Purchase 0.00 Purchase Return 3000.00 0.00 Dr Purchase 2800.00 Sales 0.00 5000.00 Dr Sales 0.00 sales Return 2000.00 0.00 Dr sales 0.00 sales Return 2000.00 0.00 Dr sales 1000.00
猜你喜欢
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多