ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1334|回复: 7

[求助] 请教大家一个统计的怪问题,谢谢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-4-4 15:17 | 显示全部楼层 |阅读模式
我在做一个统计时,统计的数据出现一些怪问题,请大家帮分析一下,谢谢
问题如下图所示:
付款时每单位只有一条时,统计数据正常 2.JPG
每单位每超过一条付款记录时,统计数据中应收项便会增加1000元,其它正常
3.JPG
  1. SELECT WLDW.Dw_Name AS 单位名称, WLDW.Dw_Name AS 科室名称,
  2.       SUM(YSZK.Hw_sum) AS 应收金额, SUM(FKJL.Fk_money) AS 付款金额,
  3.       SUM(YSZK.Hw_sum) + SUM(FKJL.Fk_money) AS 欠款金额, WLDW.root,
  4.       WLDW.Dw_File, WLDW.Dw_Pinyin
  5. FROM WLDW RIGHT OUTER JOIN
  6.       YSZK ON WLDW.Dw_Id = YSZK.Dw_Id LEFT OUTER JOIN
  7.       FKJL ON YSZK.Dj_Id = FKJL.Dj_id
  8. GROUP BY WLDW.Dw_Name, WLDW.root, WLDW.Dw_File, WLDW.Dw_Pinyin
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-4-4 16:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大家有空帮分析一吧,先谢了

TA的精华主题

TA的得分主题

发表于 2011-4-4 18:12 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-4-4 20:55 | 显示全部楼层
数据库文件如下:
数据库.part01.rar (195.31 KB, 下载次数: 4) 数据库.part02.rar (144.94 KB, 下载次数: 4)
  1. SELECT WLDW.Dw_Name AS 单位名称, WLDW.Dw_Name AS 科室名称,
  2.       SUM(YSZK.Hw_sum) AS 应收金额, SUM(FKJL.Fk_money) AS 付款金额,
  3.       SUM(YSZK.Hw_sum) + SUM(FKJL.Fk_money) AS 欠款金额, WLDW.root,
  4.       WLDW.Dw_File, WLDW.Dw_Pinyin
  5. FROM WLDW RIGHT OUTER JOIN
  6.       YSZK ON WLDW.Dw_Id = YSZK.Dw_Id LEFT OUTER JOIN
  7.       FKJL ON YSZK.Dj_Id = FKJL.Dj_id
  8. GROUP BY WLDW.Dw_Name, WLDW.root, WLDW.Dw_File, WLDW.Dw_Pinyin
复制代码
请大家帮帮忙分析一下,谢谢

[ 本帖最后由 qinyun 于 2011-4-4 20:59 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-4-5 08:31 | 显示全部楼层
/*单位信息表         为了测试直规特加上   说明   字段       */  
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','子')
select * from @wldw


/*各单位产生应收信息表         为了测试直规特加上  说明   字段       */      
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,'市地税-信息科   应收帐单')
select * from @YSZK

/*各单位付款记录信息表         为了测试直规特加上  说明   字段       */   
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,'市财政-农财科   付款帐单')
select * from @FKJL


/*需要的最终结果

单位序号        单位名称        科室名称        应收款        已付款        欠款余额        关系        档案文件        拼音        关系说明
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        子

*/

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-4-5 13:05 | 显示全部楼层
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


只能实现一部分功能

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-4-5 21:56 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-4-5 21:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. /*完整汇总-----------------------------------------------------------------*/
  2. select wl.单位ID, b.* from (
  3. SELECT w.单位名称, w.科室名称,d.应收金额, d.已付金额,d.欠款金额,w.档案文件,w.单位拼音,w.root
  4. FROM @WLDW w left JOIN
  5.           (SELECT b.单位ID, SUM(b.应收金额) AS 应收金额, SUM(isnull(a.付款金额, 0)) AS 已付金额, SUM(b.应收金额)+SUM(isnull(a.付款金额, 0)) AS 欠款金额
  6.          FROM @yszk b LEFT OUTER JOIN
  7.                    (SELECT 单据编号, SUM(isnull(付款金额, 0)) AS 付款金额
  8.                   FROM @fkjl
  9.                   GROUP BY 单据编号) a ON b.单据编号 = a.单据编号
  10. GROUP BY b.单位ID) d ON w.单位ID = d.单位ID
  11. where w.单位名称 <> w.科室名称
  12. UNION ALL
  13. select a.单位名称, a.单位名称 as 科室名称, sum(a.应收金额), sum(a.已付金额), sum(a.欠款金额) ,a.档案文件, a.单位拼音,0 as root
  14. from (
  15.         SELECT w.单位ID,w.单位名称, w.科室名称,d.应收金额, d.已付金额, d.欠款金额 ,w.档案文件, w.单位拼音
  16.         FROM @WLDW w left JOIN
  17.           (SELECT b.单位ID, SUM(b.应收金额) AS 应收金额, SUM(isnull(a.付款金额, 0)) AS 已付金额,SUM(b.应收金额)+SUM(isnull(a.付款金额, 0)) AS 欠款金额
  18.          FROM @yszk b LEFT OUTER JOIN
  19.                    (SELECT 单据编号, SUM(isnull(付款金额, 0)) AS 付款金额
  20.                   FROM @fkjl
  21.                   GROUP BY 单据编号) a ON b.单据编号 = a.单据编号
  22.         GROUP BY b.单位ID) d ON w.单位ID = d.单位ID
  23.         where w.单位名称 <> w.科室名称
  24. ) a
  25. group by a.单位名称,a.档案文件, a.单位拼音
  26. ) b left join @WLDW wl on b.科室名称 = wl.科室名称 and b.单位名称 = wl.单位名称
  27. order by wl.单位ID, wl.档案文件, wl.单位拼音, wl.root


  28. /*完整汇总------------------------------------------------------------------*/
复制代码
这是完成功语句,留给需要的朋友吧

[ 本帖最后由 qinyun 于 2011-4-5 22:00 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 17:00 , Processed in 0.025446 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表