如何在SQL中对具有特定条件的多行求和

如何在SQL中对具有特定条件的多行求和,sql,sql-server,Sql,Sql Server,我有一个按产品对余额进行汇总的查询,如下所示: SELECT BCM_CORPORATION_NUMBER, BCM_PRODUCT SUM(BCM_TOT_NEW_BAL) AS TOTAL_BALANCE FROM BCM_IN GROUP BY BCM_CORPORATION_NUMBER, BCM_PRODUCT ORDER BY BCM_CORPORATION_NUMBER ASC; 结果: Corp. PRODUCT. TOTAL_BALANCE 00203

我有一个按产品对余额进行汇总的查询,如下所示:

SELECT BCM_CORPORATION_NUMBER, BCM_PRODUCT
  SUM(BCM_TOT_NEW_BAL) AS TOTAL_BALANCE
FROM BCM_IN
GROUP BY BCM_CORPORATION_NUMBER, BCM_PRODUCT
ORDER BY BCM_CORPORATION_NUMBER ASC;
结果

Corp.        PRODUCT.    TOTAL_BALANCE
002030.      VCLBUS.       3000
002030.      VGOBUS.       1000
002030.      VCL000.       4000
我想将产品VCLBUS和VGOBUS的总数合并起来,在不使用VCL000产品的情况下,总共显示4000个

看起来像这样: 公司产品。总余额 2030VCLBUS/VGOBUS。4000 2030VCL000。4000

这是您的查询

SELECT t1.BCM_CORPORATION_NUMBER, t1.BCM_PRODUCT, SUM(t1.TOTAL_BALANCE) 
FROM (SELECT BCM_CORPORATION_NUMBER, BCM_PRODUCT
     SUM(BCM_TOT_NEW_BAL) AS TOTAL_BALANCE, 
     FROM BCM_IN
     GROUP BY BCM_CORPORATION_NUMBER, BCM_PRODUCT
     ) t1
WHERE t1.BCM_PRODUCT IN ('VCLBUS', 'VGOBUS')
ORDER BY t1.BCM_CORPORATION_NUMBER ASC

SELECT BCM_CORPORATION_NUMBER
    , BCM_PRODUCT
    , BCM_TOT_NEW_BAL
    , SUM(BCM_TOT_NEW_BAL) AS TOTAL_BALANCE
FROM BCM_IN
WHERE BCM_PRODUCT IN ('VCLBUS', 'VGOBUS')
GROUP BY BCM_CORPORATION_NUMBER, BCM_PRODUCT, BCM_TOT_NEW_BAL
ORDER BY BCM_CORPORATION_NUMBER ASC;
这是你想要的吗

SELECT BCM_CORPORATION_NUMBER, SUM(BCM_TOT_NEW_BAL) AS TOTAL_BALANCE
FROM BCM_IN
WHERE BCM_PRODUCT IN ('VCLBUS', 'VGOBUS')
GROUP BY BCM_CORPORATION_NUMBER
ORDER BY BCM_CORPORATION_NUMBER ASC;
或者你可以:

WHERE BCM_PRODUCT <> 'VCL000'
其中BCM_产品“VCL000”

假设您的
输出
在临时表或
CTE

create table #Output(Corp varchar(15),PRODUCT varchar(50),TOTAL_BALANCE int)



insert into #Output 
SELECT BCM_CORPORATION_NUMBER, BCM_PRODUCT
  SUM(BCM_TOT_NEW_BAL) AS TOTAL_BALANCE
FROM BCM_IN
GROUP BY BCM_CORPORATION_NUMBER, BCM_PRODUCT
;

假设,如您想要分组的
“VCLBUS”、“VGOBUS”
类似地,您需要对其他产品进行求和,并相应地对它们进行求和

创建#临时表并根据其组存储产品

create table #GroupType(PRODUCT varchar(50),groupid int)
insert into #GroupType values
 ('VCLBUS.',1)
,('VGOBUS.',1)
,('VCL000.',2)

select o.* 
,sum(TOTAL_BALANCE)over(partition by g.groupid )Group_TOTAL_BALANCE 
from #Output O
inner join #GroupType G on o.PRODUCT=g.PRODUCT

我想你可以得到你想要的任何输出。

在哪里显示vclbus+vgobus?在单独的列中?是的,那太好了。请显示您想要的预期结果,以便对表查询进行自联接?我假设在第二个查询中,T.1 BCM_产品在('VCLBUS','VGOBUS')中的位置如何将总余额合并为一个单独的列?
create table #GroupType(PRODUCT varchar(50),groupid int)
insert into #GroupType values
 ('VCLBUS.',1)
,('VGOBUS.',1)
,('VCL000.',2)

select o.* 
,sum(TOTAL_BALANCE)over(partition by g.groupid )Group_TOTAL_BALANCE 
from #Output O
inner join #GroupType G on o.PRODUCT=g.PRODUCT