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

如下查询请教怎么写?(可能比较简单,但是时间急啊,先行谢了)
表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