id time bm fy
1 2010-1-2 A部 200
2 2010-1-5 B部 500
4 2010-1-5 C部 500
3 2010-3-5 D部 400
5 2010-1-5 F部 400
我有这样一个表,想将A部和B部的fy合计在一起,最后想要结果是:
id time bm fy
1 2010-1-2 A+B部 700
2 2010-1-5 C部 500
3 2010-3-5 D部 400
4 2010-1-5 F部 400
------解决方案--------------------
没有什么规则?
------解决方案--------------------
select id,[time],case when bm='A部' then 'A+B部 ' else bm end as bm ,
case when bm='A部' then (select sum(fy) from 表 where bm in('A部','B部')) else
fy end as fy
from 表 where bm!='B部'
------解决方案--------------------
WITH a1 (id,time,bm,fy) AS
(
SELECT 1,'2010-1-2','A部',200 UNION ALL
SELECT 2,'2010-1-5','B部',500 UNION ALL
SELECT 4,'2010-1-5','C部',500 UNION ALL
SELECT 3,'2010-3-5','D部',400 UNION ALL
SELECT 5,'2010-1-5','F部',400
)
,a2 AS
(
SELECT MIN(time) time,CASE WHEN bm IN ('A部','B部') THEN 'A+B部' ELSE bm END bm,SUM(fy) fy
FROM a1
GROUP BY CASE WHEN bm IN ('A部','B部') THEN 'A+B部' ELSE bm END
)
SELECT ROW_NUMBER() OVER(ORDER BY @@SERVERNAME) id,*
FROM a2