数据结构如下:
类型 日期 余额 金额
01 2007-01-09 1584.5 3169.0
02 2007-01-09 762.5 2516.2
01 2007-01-24 3003.0 6006.2
02 2007-01-24 3519.1 7038.4
01 2007-01-25 5213.0 10426.0
02 2007-01-25 2161.4 4322.8要如下的内容,希望日期、类型统计得到信息如下:
日期 类型1 余额1 金额2 类型2 余额2 金额2
2007-01-09 01 1584.5 3169.0 02 762.5 2516.2
2007-01-24 01 3003.0 6006.2 02 3519.1 7038.4
2007-01-25 01 5213.0 10426.0 02 2161.4 4322.8得到欲上述效果,有好的实现的意见或办法也欢迎大家指教,谢谢了
类型 日期 余额 金额
01 2007-01-09 1584.5 3169.0
02 2007-01-09 762.5 2516.2
01 2007-01-24 3003.0 6006.2
02 2007-01-24 3519.1 7038.4
01 2007-01-25 5213.0 10426.0
02 2007-01-25 2161.4 4322.8要如下的内容,希望日期、类型统计得到信息如下:
日期 类型1 余额1 金额2 类型2 余额2 金额2
2007-01-09 01 1584.5 3169.0 02 762.5 2516.2
2007-01-24 01 3003.0 6006.2 02 3519.1 7038.4
2007-01-25 01 5213.0 10426.0 02 2161.4 4322.8得到欲上述效果,有好的实现的意见或办法也欢迎大家指教,谢谢了
b.类型 as 类型2,b.余额 as 余额2,b.金额 as 金额2
from tablename a
full join tablename b
on a.日期=b.日期
and a.类型='01'
and b.类型='02'
insert T select '01', '2007-01-09', 1584.5, 3169.0
union all select '02', '2007-01-09', 762.5, 2516.2
union all select '01', '2007-01-24', 3003.0, 6006.2
union all select '02', '2007-01-24', 3519.1, 7038.4
union all select '01', '2007-01-25', 5213.0, 10426.0
union all select '02', '2007-01-25', 2161.4, 4322.8declare @sql varchar(8000)
set @sql='select 日期=convert(char(10), 日期, 120),'
select @sql=@sql+quotename('类型'+类型)+'='+quotename(类型, '''')+
',余额'+类型+'=max(case when 类型='+quotename(类型, '''')+' then 余额 else 0 end)'+
',金额'+类型+'=max(case when 类型='+quotename(类型, '''')+' then 金额 else 0 end),'
from T
group by 类型
select @sql=left(@sql, len(@sql)-1),
@sql=@sql+' from T group by convert(char(10), 日期, 120)'
exec(@sql)--result
日期 类型01 余额01 金额01 类型02 余额02 金额02
---------- ---- ------------ ------------ ---- ------------ ------------
2007-01-09 01 1584.5 3169.0 02 762.5 2516.2
2007-01-24 01 3003.0 6006.2 02 3519.1 7038.4
2007-01-25 01 5213.0 10426.0 02 2161.4 4322.8