日期:2014-05-18  浏览次数:20657 次

请教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) '