100分求一个交叉表查询在线等
表的格式如下   
 日期                              客户                           销售数量 
 20061001               家乐福                           200 
 20061002            上好佳                              300 
 20061003            赠品                                    400 
 20061103            家乐新店                        500 
 20061105            北乐小店                        600 
 20061106               家乐福                           200 
 20061006            北乐小店                        200 
 20061107            赠品                                    400     
 现在生成如下格式: 
 客户                                 200610                           200611 
 家乐福                                 200                                          200 
 ...........     
 请大家帮忙 
 搜索了结果了,可是一下不太明白用Case语句如何生成。。   
 请大伙给个结果,同时说明一下原理,谢谢 
 授人以鱼,不如授人以渔。。谢谢   
------解决方案--------------------select 客户,  
 200610 = sum(case when substring(cast(日期 as varchar),1,6) =  '200610 ' then 销售数量 else 0 end), 
 200611 = sum(case when substring(cast(日期 as varchar),1,6) =  '200611 ' then 销售数量 else 0 end) 
 from T 
 group by 客户
------解决方案--------------------参考: 
 --生成测试示例数据 
 create table t(类型 varchar(4),名称 varchar(10)) 
 insert into t select  'a ', '123  ' 
 insert into t select  'a ', '444  ' 
 insert into t select  'b ', '1we3 ' 
 insert into t select  'b ', '4er  ' 
 insert into t select  'b ', 'dd   ' 
 insert into t select  'b ', 'ddvg ' 
 go   
 --获得分组编号的SQL语句示例 
 select 
     a.*, 
     (select count(*) from t where 类型=a.类型 and 名称 <=a.名称) as Num 
 from 
     t a 
 go   
 --编号的SQL语句输出的结果 
 /* 
 类型   名称         Num          
 ---- ---------- -----------  
 a    123        1 
 a    444        2 
 b    1we3       1 
 b    4er        2 
 b    dd         3 
 b    ddvg       4 
 */   
 --创建动态SQL构建交叉表的存储过程 
 create procedure sp_test 
 as 
 begin 
     declare @sql varchar(8000) 
     set @sql= ' '       
     select @sql=@sql+ ',[名称 '+rtrim(num)+ ']=max(case num when  '+rtrim(num)+ ' then 名称 end) ' 
     from (select (select count(*) from t where 类型=a.类型 and 名称 <=a.名称) as Num from t a) b 
     group by num order by num       
     set @sql= 'select 类型 '+@sql+ ' from (select a.*,(select count(*) from t where 类型=a.类型 and 名称 <=a.名称) as Num from t a) b group by b.类型 '       
     exec(@sql) 
 end 
 go   
 --执行存储过程 
 exec sp_test 
 go   
 --查看存储过程执行结果 
 /* 
 类型   名称1        名称2        名称3        名称4         
 ---- ---------- ---------- --------