|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
×
交叉点为日期型数据的交叉表怎么用SQL语句实现
我的数据为:
单号 审批阶段 日期
001 1 2007-10-01
001 2 2007-10-02
001 3 2007-10-03
002 1 2007-10-04
002 2 2007-10-05
想得到的样子:
单号 阶段1 阶段2 阶段3
001 2007-10-01 2007-10-02 2007-10-03
002 2007-10-04 2007-10-05
交叉点是数字的可以用SUM合计,但日期型的不知道怎么做,请指点,谢谢
1server1 2007-11-3 02:26
此回复于2007-11-16 08:42被 redking 评为最佳答案
/*
那就用max */
--原始数据:#T
create table #T (单号 varchar(10),审批阶段 int,日期 varchar(10)) insert #T
select '001',1,'2007-10-01' union all
select '001',2,'2007-10-02' union all
select '001',3,'2007-10-03' union all
select '002',1,'2007-10-04' union all
select '002',2,'2007-10-05'
--静态
select
单号,
[阶段1]=max(case 审批阶段 when 1 then 日期 else '' end),
[阶段2]=max(case 审批阶段 when 2 then 日期 else '' end),
[阶段3]=max(case 审批阶段 when 3 then 日期 else '' end)
from #T group by 单号
--动态
declare @sql varchar(8000)
select @sql=isnull(@sql+',','')+'[阶段'+ltrim(审批阶段)+']=max(case 审批阶段 when '+ltrim(审批阶段)+' then 日期 else '''' end)' from #T group by 审批阶段
exec ('select 单号,'+@sql+' from #T group by 单号')
/* 单号 阶段1 阶段2 阶段3
---------- ---------- ---------- ----------
001 2007-10-01 2007-10-02 2007-10-03 002 2007-10-04 2007-10-05
*/
--删除对象 drop table #T
d
wenyixin 2007-11-3 02:26
select 单号, [1] as 阶段1, [2] as 阶段2, [3] as 阶段3 from T
pivot( max(日期) for 审批阶段 in (1,2,3)) as P |
|