- 爱易网页
-
MSSQL教程
- 如下查询请问如何写?(可能比较简单,但是时间急先行谢了)
日期:2014-05-18 浏览次数:20468 次
如下查询请教怎么写?(可能比较简单,但是时间急啊,先行谢了)
表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