请教SQL查询问题,请帮帮忙?
数据结构如下:
类型 日期 余额 金额
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
得到欲上述效果,有好的实现的意见或办法也欢迎大家指教,谢谢了
------解决方案--------------------同一天保证只有两个类型吗?
select isnull(a.日期,b.日期) as 日期,a.类型 as 类型1,a.余额 as 余额1,a.金额 as 金额1
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 '
------解决方案--------------------你不是想把所有的类型都规纳到类型1去啊
------解决方案--------------------我知道你的意思啦...
------解决方案--------------------create table T(类型 varchar(10), 日期 datetime, 余额 decimal(10,1), 金额 decimal(10, 1))
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.8
declare @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) '