【问题标题】:multiple sum using join in sql在 sql 中使用 join 进行多重求和
【发布时间】:2017-03-11 08:03:54
【问题描述】:

这是Rudresh BR,试图通过求和将相同行的数据获取到多列中。但是遇到了一个问题,请找到下面提到的有关该问题的详细信息,

预期数据:

但是获得了数据:

数据存在于表中

  1. 列表项

使用的查询:

select 
    a.BM_BANK_NAME,
    SUM(PCBunit.BID_CURRENCY_VALUE) as PCBUnitSum,
     SUM(PTBunit.BID_CURRENCY_VALUE) as PTBUnitSum  
from 
     dbo.BG_Mtr_Bank_Master a 
     inner join dbo.BG_Tra_Issuance_Details PCBunit on a.BM_ID=PCBunit.BID_BANK_NAME and PCBunit.BID_UNIT_DIVISION='PCB' 
     inner join dbo.BG_Tra_Issuance_Details PTBunit on a.BM_ID=PTBunit.BID_BANK_NAME and PTBunit.BID_UNIT_DIVISION='PTB' 
group by 
     a.BM_BANK_NAME,
     PCBunit.BID_UNIT_DIVISION,
     PTBunit.BID_UNIT_DIVISION

PCBUnitSum 和 PTBUnitSum 分别是 PCB 和 PTB 的 BID_Currency_Value 行的总和。

我观察到的是,一旦总和完成,即 3000(我期望作为输出),它会根据 PCB 和 PTB 分别存在的行数重做总和,因此有 3 行 PCB,3000+ 3000+3000=9000 以 O/P 形式给出。

我要求每个人, 请帮我找出问题所在?

【问题讨论】:

  • 您使用的是 SQL Server 还是 MySQL?这些是不同的产品,通常需要不同的解决方案。请不要重复标记。

标签: mysql sql sql-server sql-server-2008


【解决方案1】:

不要自加入表,用例

select a.BM_BANK_NAME
     , SUM(case when t.BID_UNIT_DIVISION ='PCB' then t.BID_CURRENCY_VALUE end) as PCBUnitSum
     , SUM(case when t.BID_UNIT_DIVISION ='PTB' then t.BID_CURRENCY_VALUE end) as PTBUnitSum  
  from dbo.BG_Mtr_Bank_Master a 
 inner 
  join dbo.BG_Tra_Issuance_Details t 
    on a.BM_ID = t.BID_BANK_NAME 
   and t.BID_UNIT_DIVISION in ('PCB', 'PTB')
 group  
    by a.BM_BANK_NAME

【讨论】:

  • 会抛出and t.BID_UNIT_DIVISION = in ('PCB', 'PTB')行的错误原因
  • Rahul ,我要从表中选择不同的值。也谢谢你:)
  • 请考虑[接受这个答案]。接受答案是对贡献者的尊重,并帮助有类似问题的其他人找到可行的解决方案。
【解决方案2】:

试试这个:

DECLARE @list_item TABLE ( unit NVARCHAR(5),bank NVARCHAR(5),curr INT)
INSERT INTO @list_item VALUES ('PCB','SBI',1000),('PCB','SBI',1000),
('PCB','SBI',1000),('PTB','SBI',1000),('PTB','SBI',1000),
('PTB','SBI',1000)

SELECT bank,
SUM(CASE WHEN unit='PCB' THEN curr END) PCBUnitSum,
SUM(CASE WHEN unit='PTB' THEN curr END) PTBUnitSum
FROM ( SELECT unit,bank,SUM(curr)curr FROM @list_item 
group by unit,bank ) A GROUP BY bank

这可能会有所帮助。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-14
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    相关资源
    最近更新 更多