??? 如下统计,该如何生成结果 ???

lantianhf03 2014-03-29 04:51:13
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
...全文
53 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2014-03-29
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- 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
                                日期<='2014-03-27') AS 未付
FROM
    t1
UNION ALL
SELECT
    b.合同, b.客户, a.金额, SUM(付款) AS 付款, a.金额-SUM(付款)
FROM
    t1 AS a
INNER JOIN t2 AS b ON a.合同=b.合同
WHERE
    b.日期<='2014-03-27'
GROUP BY
    b.合同, b.客户, a.金额
----------------结果----------------------------
/* 合同   客户   金额          已付          未付
---- ---- ----------- ----------- -----------
呈前        400         90          310
001  王五   100         20          80
002  李四   300         70          230

(3 行受影响)

*/

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧