注册 登录
编程论坛 SQL Server论坛

请教大家一个统计的怪问题,谢谢

qinyun 发布于 2011-04-04 16:39, 474 次点击
我在做一个统计时,统计的数据出现一些怪问题,请大家帮分析一下,谢谢
只有本站会员才能查看附件,请 登录



问题如下图所示:付款时每单位只有一条时,统计数据正常
每单位每超过一条付款记录时,统计数据中应收项便会增加1000元,其它正常

只有本站会员才能查看附件,请 登录


程序代码:
SELECT WLDW.Dw_Name AS 单位名称, WLDW.Dw_Name AS 科室名称,
      SUM(YSZK.Hw_sum) AS 应收金额, SUM(FKJL.Fk_money) AS 付款金额,
      SUM(YSZK.Hw_sum) + SUM(FKJL.Fk_money) AS 欠款金额, WLDW.root,
      WLDW.Dw_File, WLDW.Dw_Pinyin
FROM WLDW RIGHT OUTER JOIN
      YSZK ON WLDW.Dw_Id = YSZK.Dw_Id LEFT OUTER JOIN
      FKJL ON YSZK.Dj_Id = FKJL.Dj_id
GROUP BY WLDW.Dw_Name, WLDW.root, WLDW.Dw_File, WLDW.Dw_Pinyin
3 回复
#2
红色警戒2011-04-04 22:08
先去掉group看看,是不是记录有多的。
#3
qinyun2011-04-05 13:02
回复 2楼 红色警戒
程序代码:
select 单位,科室,金额
from
(
select 单位,科室,SUM(金额) as 金额
from
(
select 单位,
case when 科室 like 'A%' then 'A'
     when 科室 like 'B%' then 'B'
end
as 科室,
amount
from tb
) x
group by 单位,科室
union all
select 单位,科室,SUM(金额) as 金额
from tb
where 单位!=科室
group by 单位,科室
)y
order by 单位
#4
qinyun2011-04-05 13:03
程序代码:
/*单位信息表         为了测试直规特加上   说明   字段       */
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

1