首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于一部分Groupby

2013-09-05 
关于部分Groupby现在有一个表员工号区分区分名金额---------------------------------111工资10000112奖金

关于部分Groupby
现在有一个表
员工号    区分    区分名    金额
---------------------------------
1        11     工资      10000
1        12     奖金      3000
1        13     饭补      200
1        14     车补      100
2        11     工资      8000
2        12     奖金      2000
2        13     饭补      200
2        14     车补      100
3        11     工资      10000
3        12     奖金      2000

想要得到的结果是,工资和奖金合计,饭补和车补不变,而合计的区分名为【合计】

想要的结果“
员工号    区分    区分名    金额
----------------------------------
1        NULL   合计      13000
1        13     饭补      200
1        14     车补      100
2        NULL   合计      10000
2        13     饭补      200
2        14     车补      100
3        NULL   合计      12000

谢谢了

------解决方案--------------------


if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [员工号] varchar(100), [区分] varchar(100), [区分名] varchar(100), [金额] INT);
insert #temp
select '1','11','工资','10000' union all
select '1','12','奖金','3000' union all
select '1','13','饭补','200' union all
select '1','14','车补','100' union all
select '2','11','工资','8000' union all
select '2','12','奖金','2000' union all
select '2','13','饭补','200' union all
select '2','14','车补','100' union all
select '3','11','工资','10000' union all
select '3','12','奖金','2000' 

--SQL:
SELECT 员工号, 区分名, 区分, 金额=SUM(金额)
FROM
(
select
员工号,
区分 = (CASE WHEN 区分名 NOT IN('饭补','车补') THEN NULL ELSE 区分 END),
区分名 = (CASE WHEN 区分名 NOT IN('饭补','车补') THEN '合计' ELSE 区分名 END),
金额
from #temp
) T
GROUP BY 员工号, 区分名, 区分
ORDER BY T.员工号,  区分
/*
员工号区分名区分金额
1合计NULL13000
1饭补13200
1车补14100
2合计NULL10000
2饭补13200
2车补14100
3合计NULL12000
*/

[解决办法]
select 员工号,区分,区分名,sum(金额) as 金额
from (
select 员工号,区分=CASE WHEN 区分名 IN('工资','奖金') THEN NULL ELSE 区分 END
 ,区分名=CASE WHEN 区分名 IN('工资','奖金') THEN '合计' ELSE 区分名 END
,金额
from #tb
)t
group by 员工号,区分,区分名

/*
1NULL合计13000
113饭补200
114车补100
2NULL合计10000
213饭补200
214车补100
3NULL合计12000

*/

热点排行
Bad Request.