T1合同表,T2付款表,根据给定付款截止时间,查询出该段有哪些合同,截止到给定时间的统计表T3,其中T3第一行默认序号为0,合同显示为呈前,改行为结转行,请问该如何写SQL(SQL2000环境)
T1
合同 客户 金额 合同日期
001 王五 100 2013-1-1
002 李四 300 2014-3-20
003 张三 200 2014-3-29
T2
合同 客户 操作方式 付款 日期
001 王五 已付 20 2013-1-3
002 李四 已付 40 2014-3-20
002 李四 已付 30 2014-3-27
002 李四 已付 10 2014-3-28
003 张三 已付 10 2014-3-29
T3:截止时间到 2014-3-27
序号 合同 客户 金额 已付 未付
0 呈前 400 90 310
1 001 王五 100 20 80
2 002 李四 300 70 230
------解决方案--------------------
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2014-03-29 17:28:11
-- Verstion:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[T1]
if object_id('[T1]') is not null drop table [T1]
go
create table [T1]([合同] varchar(3),[客户] varchar(4),[金额] int,[合同日期] datetime)
insert [T1]
select '001','王五',100,'2013-1-1' union all
select '002','李四',300,'2014-3-20' union all
select '003','张三',200,'2014-3-29'
--> 测试数据:[T2]
if object_id('[T2]') is not null drop table [T2]
go
create table [T2]([合同] varchar(3),[客户] varchar(4),[操作方式] varchar(4),[付款] int,[日期] datetime)
insert [T2]
select '001','王五','已付',20,'2013-1-3' union all
select '002','李四','已付',40,'2014-3-20' union all
select '002','李四','已付',30,'2014-3-27' union all
select '002','李四','已付',10,'2014-3-28' union all
select '003','张三','已付',10,'2014-3-29'
--------------开始查询--------------------------
SELECT DISTINCT
'呈前' AS 合同, '' AS 客户, (SELECT
SUM(金额) AS 金额
FROM
t1
WHERE
合同日期<='2014-03-27') AS 金额,
(SELECT
SUM(付款) AS 已付
FROM
t2
WHERE
日期<='2014-03-27') AS 已付,
(SELECT
SUM(金额) AS 金额
FROM
t1
WHERE
合同日期<='2014-03-27')-(SELECT
SUM(付款) AS 已付
FROM
t2
WHERE