程序代码:
/*单位信息表 为了测试直规特加上 说明 字段 */
DECLARE @wldw TABLE (单位ID int, 单位名称 nvarchar(11), 科室名称 nvarchar(10), root int, 档案文件 nvarchar(10), 单位拼音 nvarchar(10),说明 nvarchar(50))
INSERT @wldw VALUES(1,'市政府','市政府','0','A001','SZF','父单位')
INSERT @wldw VALUES(2,'市政府','机要科','1','A001','SZF','子')
INSERT @wldw VALUES(3,'市政府','秘书科','1','A001','SZF','子')
INSERT @wldw VALUES(4,'市政府','办公室','1','A001','SZF','子')
INSERT @wldw VALUES(5,'市财政','市财政','0','B001','SCZ','父单位')
INSERT @wldw VALUES(6,'市财政','办公室','1','B001','SCZ','子')
INSERT @wldw VALUES(7,'市财政','农财科','1','B001','SCZ','子')
INSERT @wldw VALUES(8,'市财政','采购科','1','B001','SCZ','子')
INSERT @wldw VALUES(9,'市地税','市地税','0','C001','SDS','父单位')
INSERT @wldw VALUES(10,'市地税','财务科','1','C001','SDS','子')
INSERT @wldw VALUES(11,'市地税','信息科','1','C001','SDS','子')
/*各单位产生应收信息表 为了测试直规特加上 说明 字段 */
DECLARE @YSZK TABLE (FID int,单据编号 nvarchar(11), 单位ID int, 应收金额 money,说明 nvarchar(50))
INSERT @YSZK VALUES(1,'20110403001','2',1000,'市政府-机要科 应收帐单')
INSERT @YSZK VALUES(2,'20110403002','2',1000,'市政府-机要科 应收帐单')
INSERT @YSZK VALUES(3,'20110403003','3',1000,'市政府-秘书科 应收帐单')
INSERT @YSZK VALUES(4,'20110403004','3',1000,'市政府-秘书科 应收帐单')
INSERT @YSZK VALUES(5,'20110403005','6',1000,'市财政-办公室 应收帐单')
INSERT @YSZK VALUES(6,'20110403006','7',1000,'市财政-农财科 应收帐单')
INSERT @YSZK VALUES(7,'20110403007','8',1000,'市财政-采购科 应收帐单')
INSERT @YSZK VALUES(8,'20110403008','10',1000,'市地税-财务科 应收帐单')
INSERT @YSZK VALUES(8,'20110403009','10',1000,'市地税-财务科 应收帐单')
INSERT @YSZK VALUES(8,'20110403010','11',1000,'市地税-信息科 应收帐单')
/*各单位付款记录信息表 为了测试直规特加上 说明 字段 */
DECLARE @FKJL TABLE (FID int,单据编号 nvarchar(11), 付款金额 money,说明 nvarchar(50))
INSERT @FKJL VALUES(1,'20110403001',-100,'市政府-机要科 付款帐单')
INSERT @FKJL VALUES(2,'20110403001',-100,'市政府-机要科 付款帐单')
INSERT @FKJL VALUES(3,'20110403004',-100,'市政府-秘书科 付款帐单')
INSERT @FKJL VALUES(4,'20110403004',-100,'市政府-秘书科 付款帐单')
INSERT @FKJL VALUES(5,'20110403008',-100,'市地税-财务科 付款帐单')
INSERT @FKJL VALUES(6,'20110403010',-100,'市地税-信息科 付款帐单')
INSERT @FKJL VALUES(7,'20110403010',-100,'市地税-信息科 付款帐单')
INSERT @FKJL VALUES(8,'20110403006',-100,'市财政-农财科 付款帐单')
INSERT @FKJL VALUES(9,'20110403006',-100,'市财政-农财科 付款帐单')
/*需要的最终结果
单位序号 单位名称 科室名称 应收款 已付款 欠款余额 关系 档案文件 拼音 关系说明
1 市政府 市政府 4000 -400 3600 0 A001 SZF 父单位
2 市政府 机要科 2000 -200 1800 1 A001 SZF 子
3 市政府 秘书科 2000 -200 1800 1 A001 SZF 子
4 市政府 办公室 0 0 1 A001 SZF 子
5 市财政 市财政 3000 -200 2800 0 B001 SCZ 父单位
6 市财政 办公室 1000 0 1000 1 B001 SCZ 子
7 市财政 农财科 1000 -200 800 1 B001 SCZ 子
8 市财政 采购科 1000 0 1000 1 B001 SCZ 子
9 市地税 市地税 3000 -300 2700 0 C001 SDS 父单位
10 市地税 财务科 2000 -100 1900 1 C001 SDS 子
11 市地税 信息科 1000 -200 800 1 C001 SDS 子
*/
SELECT d.*, w.单位名称, w.科室名称
FROM @WLDW w INNER JOIN
(SELECT b.单位ID, SUM(b.应收金额) AS lll, SUM(isnull(a.付款金额, 0)) AS yfk
FROM @yszk b LEFT OUTER JOIN
(SELECT 单据编号, SUM(isnull(付款金额, 0)) AS 付款金额
FROM @fkjl
GROUP BY 单据编号) a ON b.单据编号 = a.单据编号
GROUP BY b.单位ID) d ON w.单位ID = d.单位ID