如何在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