日期:2014-05-16  浏览次数:20417 次

??? 如下统计,该如何生成结果 ???
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 金额
  &n