- 爱易网页
- 
                            MSSQL教程
- 如下查询请问如何写?(可能比较简单,但是时间急先行谢了) 
日期:2014-05-18  浏览次数:20589 次 
                    
                        
                         如下查询请教怎么写?(可能比较简单,但是时间急啊,先行谢了)
表A: 
 客户名      预付款      预付日期 
 -------------------------------- 
 张三            10000         2007-09-01 
 李四            20000         2007-09-01 
 张三            20000         2007-09-02 
 张三            40000         2007-09-04 
 张三            50000         2007-09-05 
  
 表B: 
 客户名      消费款      消费日期 
 -------------------------------- 
 张三            1000            2007-09-01   08:00:00 
 张三               500            2007-09-01   14:00:0 
 李四            20000         2007-09-03   12:00:00 
 张三            10000         2007-09-04   12:00:01 
 张三            10000         2007-09-04   13:00:00    
 张三            90000         2007-09-06   09:00:00 
 张三            10000         2007-09-07   10:00:00 
  
 如何能得到如下的查询报表:(其实预付款日期与日期一致可以不要的) 
 如查询客户“张三”的9月份“结存余款报表 " 
  
 日期	预付款		预付款日期	消费金额	            结存欠 
 --------------------------- 
 1	10000         	                           2007-09-01                        1500		8500 
 2	20000		2007-09-02	0		28500 
 4	40000		2007-09-04	20000		48500 
 5	50000		2007-09-05	0		98500 
 6	0		2007-09-06	90000		8500 
 7	0		2007-09-07	10000		-1500 
 sum               120000				121500		-1500 
------解决方案--------------------
create table A(客户名 varchar(10),预付款 int,预付日期 datetime) 
 insert into A values( '张三 ',    10000,    '2007-09-01 ') 
 insert into A values( '李四 ',    20000,    '2007-09-01 ') 
 insert into A values( '张三 ',    20000,    '2007-09-02 ') 
 insert into A values( '张三 ',    40000,    '2007-09-04 ') 
 insert into A values( '张三 ',    50000,    '2007-09-05 ') 
 create table B(客户名 varchar(10),消费款 int,消费日期 datetime) 
 insert into B values( '张三 ',    1000,     '2007-09-01 08:00:00 ') 
 insert into B values( '张三 ',     500,     '2007-09-01 14:00:0 ') 
 insert into B values( '李四 ',    20000,    '2007-09-03 12:00:00 ') 
 insert into B values( '张三 ',    10000,    '2007-09-04 12:00:01 ') 
 insert into B values( '张三 ',    10000,    '2007-09-04 13:00:00 ') 
 insert into B values( '张三 ',    90000,    '2007-09-06 09:00:00 ') 
 insert into B values( '张三 ',    10000,    '2007-09-07 10:00:00 ') 
 go 
  
 declare @客户名 as varchar(10) 
 set @客户名 =  '张三 ' 
 declare @日期 as varchar(10) 
 set @日期 =  '2007-09 ' 
  
 select isnull(t1.预付款日期,t2.消费款日期) 预付款日期,isnull(t1.预付款,0) 预付款,isnull(消费款,0) 消费金额 , isnull(t1.预付款,0) - isnull(消费款,0) 结存欠 into temp from 
 (select convert(varchar(10),预付日期,120) 预付款日期,sum(预付款) 预付款 from A where 客户名=@客户名 and left(convert(varchar(10),预付日期,120),7) = @日期 group by convert(varchar(10),预付日期,120)) t1 full join 
 (select convert(varchar(10),消费日期,120) 消费款日期,sum(消费款) 消费款 from B where 客户名=@客户名 and left(convert(varchar(10),消费日期,120),7) = @日期 group by convert(varchar(10),消费日期,120)) t2 on t1.预付款日期 = t2.消费款日期 
  
 update temp 
 set 结存欠=(select isnull(sum(预付款 - 消费金额),0)  
 from temp tt