34,575
社区成员
发帖
与我相关
我的任务
分享
if OBJECT_ID('tempdb..#temp', 'u') is not null drop table #temp;
go
create table #temp( [单号] varchar(100), [审核人] varchar(100), [流程节点] int);
insert #temp
select 'A001','张三','2001' union all
select 'A001','李四','2002' union all
select 'A001','陈五','2003' union all
select 'A001','王六','2004' union all
select 'A002','张三','2001' union all
select 'A002','李四','2002' union all
select 'A002','陈五','2003' union all
select 'A002','王六','2004'
--为什么不能用聚合呢?
--方法1.CASE WHEN:
SELECT
[单号],
[一审(2001)] = MAX(CASE [流程节点] WHEN 2001 THEN [审核人] END),
[二审(2002)] = MAX(CASE [流程节点] WHEN 2002 THEN [审核人] END),
[三审(2003)] = MAX(CASE [流程节点] WHEN 2003 THEN [审核人] END),
[四审(2004)] = MAX(CASE [流程节点] WHEN 2004 THEN [审核人] END)
from #temp
GROUP BY [单号]
--方法2.PIVOT:它实际上也会被转化成case when语句
SELECT
[单号],
[一审(2001)] = [2001],
[二审(2002)] = [2002],
[三审(2003)] = [2003],
[四审(2004)] = [2004]
from #temp A
PIVOT
(MAX([审核人]) FOR [流程节点] IN([2001],[2002],[2003],[2004])) B
/*
单号 一审(2001) 二审(2002) 三审(2003) 四审(2004)
A001 张三 李四 陈五 王六
A002 张三 李四 陈五 王六
*/