需求描述:
已有经费预算数据、经费调整记录、经费使用记录,需求输出视图显示经费使用进度。
即经费预算金额、调整后金额、使用冻结金额、已使用金额、剩余可用金额。
相关蓝图:
需求分析:
- 基础数据:项目、预算维度、科目、科目类型、年份
- 预算金额:来源经费预算数据。
- 调整后金额:经费预算金额+调整合计
- 冻结金额:来源使用记录合计(状态:审批中/冻结)。
- 已使用金额:来源使用记录(状态:完成/扣减)
- 剩余可用金额:金额+调整金额+调减金额-冻结金额-已使用金额。
输出思路:
- 调整记录可能会有新增的科目,所以预算数据+调整记录 去重后得出完整的 项目-科目-年份表:union。
- 之后左拼接预算金额、调整金额、冻结金额、已使用金额。
- 之后计算调整后金额、剩余可用金额。
- 预算维度为总额预算的,年份为空。
- 输出结果拼接项目类型,用于计算直接费用合计和间接费用合计。
输出记录:
1.1获取预算数据表和字段:uf_jfys xm,km,nf,je,bzlc, ytsmjcsyj
1.2获取调整记录表和字段:uf_jftzls xm,km,nf,dzje,zt
1.3获取使用记录表和字段:uf_jfsyls xm,km,nf,je, zt
1.4获取科目信息表和字段:uf_km id,kmlx
1.5获取项目信息表和字段:uf_jfsb id,yswd
2.1获取完整的项目-科目-年份
预算数据:select xm,km,nf from uf_jfys
调整数据:select xm,km,nf from uf_jftzls
拼接:select xm,km,nf from uf_jfys union select xm,km,nf from uf_jftzls
3.1拼接项目预算维度
SELECT
t1.xm,
t1.km,
t1.nf,
xm.yswd
FROM
( SELECT xm, km, nf FROM uf_jfys UNION SELECT xm, km, nf FROM uf_jftzls ) t1
LEFT JOIN uf_jfsb xm ON xm.id = t1.xm
3.2拼接科目类型
SELECT
t1.xm,
t1.km,
t1.nf,
xm.yswd,
km.kmlx
FROM
( SELECT xm, km, nf FROM uf_jfys UNION SELECT xm, km, nf FROM uf_jftzls ) t1
LEFT JOIN uf_jfsb xm ON xm.id = t1.xm
LEFT JOIN uf_km km ON km.id = t1.km
4.1拼接预算编制
SELECT
t1.xm,
t1.km,
t1.nf,
xm.yswd,
km.kmlx,
ys.je,
ys.bzlc,
ys.ytsmjcsyj
FROM
( SELECT xm, km, nf FROM uf_jfys UNION SELECT xm, km, nf FROM uf_jftzls ) t1
LEFT JOIN uf_jfsb xm ON xm.id = t1.xm
LEFT JOIN uf_km km ON km.id = t1.km
LEFT JOIN uf_jfys ys ON ys.xm = t1.xm
AND ys.km = t1.km
AND ys.nf = t1.nf
5.1拼接调整金额前计算调整金额(完成调整金额、审批中加金额、审批中减金额)
select xm,km,nf,sum(case when zt=5 then dzje end) as wcdz,sum(case when zt>1 and zt<5 and dzje>0 then dzje end) as spdza,sum(case when zt>1 and zt<5 and dzje<0 then dzje end) as spdzb from uf_jftzls group by xm,km,nf
5.2拼接调整金额
SELECT
t1.xm,
t1.km,
t1.nf,
xm.yswd,
km.kmlx,
ys.je,
ys.bzlc,
ys.ytsmjcsyj,
dz.wcdz,
dz.spdza,
dz.spdzb
FROM
( SELECT xm, km, nf FROM uf_jfys UNION SELECT xm, km, nf FROM uf_jftzls ) t1
LEFT JOIN uf_jfsb xm ON xm.id = t1.xm
LEFT JOIN uf_km km ON km.id = t1.km
LEFT JOIN uf_jfys ys ON ys.xm = t1.xm
AND ys.km = t1.km
AND ys.nf = t1.nf
LEFT JOIN (
SELECT
xm,
km,
nf,
sum( CASE WHEN zt = 5 THEN dzje END ) AS wcdz,
sum( CASE WHEN zt > 1 AND zt < 5 AND dzje > 0 THEN dzje END ) AS spdza,
sum( CASE WHEN zt > 1 AND zt < 5 AND dzje < 0 THEN dzje END ) AS spdzb
FROM
uf_jftzls
GROUP BY
xm,
km,
nf
) dz ON dz.xm = t1.xm
AND dz.km = t1.km
AND dz.nf = t1.nf
6.1拼接冻结金额、扣减金额前计算
SELECT xm, km, nf, sum( CASE WHEN zt = 5 THEN je END ) AS wcsy, sum( CASE WHEN zt > 1
AND zt < 5 THEN
je
END
) AS spdj
FROM
uf_jfsyls
GROUP BY
xm,
km,
nf
6.2拼接冻结金额、扣减金额
SELECT
t1.xm,
t1.km,
t1.nf,
xm.yswd,
km.kmlx,
ys.je,
ys.bzlc,
ys.ytsmjcsyj,
dz.wcdz,
dz.spdza,
dz.spdzb,
sy.syje,
sy.spdj
FROM
( SELECT xm, km, nf FROM uf_jfys UNION SELECT xm, km, nf FROM uf_jftzls ) t1
LEFT JOIN uf_jfsb xm ON xm.id = t1.xm
LEFT JOIN uf_km km ON km.id = t1.km
LEFT JOIN uf_jfys ys ON ys.xm = t1.xm
AND ys.km = t1.km
AND ys.nf = t1.nf
LEFT JOIN (
SELECT
xm,
km,
nf,
sum( CASE WHEN zt = 5 THEN dzje END ) AS wcdz,
sum( CASE WHEN zt > 1 AND zt < 5 AND dzje > 0 THEN dzje END ) AS spdza,
sum( CASE WHEN zt > 1 AND zt < 5 AND dzje < 0 THEN dzje END ) AS spdzb
FROM
uf_jftzls
GROUP BY
xm,
km,
nf
) dz ON dz.xm = t1.xm
AND dz.km = t1.km
AND dz.nf = t1.nf
LEFT JOIN (
SELECT
xm,
km,
nf,
sum( CASE WHEN zt = 5 THEN je END ) AS syje,
sum( CASE WHEN zt > 1 AND zt < 5 THEN je END ) AS spdj
FROM
uf_jfsyls
GROUP BY
xm,
km,
nf
) sy ON sy.xm = t1.xm
AND sy.km = t1.km
AND sy.nf = t1.nf
7.1如果为空则计算为0
SELECT
t1.xm,
t1.km,
t1.nf,
xm.yswd,
km.kmlx,
isnull( ys.je, 0 ) AS je,
ys.bzlc,
ys.ytsmjcsyj,
isnull( dz.wcdz, 0 ) AS wcdz,
isnull( dz.spdza, 0 ) AS spdza,
isnull( dz.spdzb, 0 ) AS spdzb,
isnull( sy.syje, 0 ) AS syje,
isnull( sy.spdj, 0 ) AS spdj
FROM
( SELECT xm, km, nf FROM uf_jfys UNION SELECT xm, km, nf FROM uf_jftzls ) t1
LEFT JOIN uf_jfsb xm ON xm.id = t1.xm
LEFT JOIN uf_km km ON km.id = t1.km
LEFT JOIN uf_jfys ys ON ys.xm = t1.xm
AND ys.km = t1.km
AND ys.nf = t1.nf
LEFT JOIN (
SELECT
xm,
km,
nf,
sum( CASE WHEN zt = 5 THEN dzje END ) AS wcdz,
sum( CASE WHEN zt > 1 AND zt < 5 AND dzje > 0 THEN dzje END ) AS spdza,
sum( CASE WHEN zt > 1 AND zt < 5 AND dzje < 0 THEN dzje END ) AS spdzb
FROM
uf_jftzls
GROUP BY
xm,
km,
nf
) dz ON dz.xm = t1.xm
AND dz.km = t1.km
AND dz.nf = t1.nf
LEFT JOIN (
SELECT
xm,
km,
nf,
sum( CASE WHEN zt = 5 THEN je END ) AS syje,
sum( CASE WHEN zt > 1 AND zt < 5 THEN je END ) AS spdj
FROM
uf_jfsyls
GROUP BY
xm,
km,
nf
) sy ON sy.xm = t1.xm
AND sy.km = t1.km
AND sy.nf = t1.nf
7.2计算调整后金额和可用金额
SELECT
t1.xm,
t1.km,
t1.nf,
xm.yswd,
km.kmlx,
isnull( ys.je, 0 ) AS je,
isnull( ys.je, 0 ) + isnull( dz.wcdz, 0 ) AS dzhje,
ys.bzlc,
ys.ytsmjcsyj,
isnull( dz.wcdz, 0 ) AS wcdz,
isnull( dz.spdza, 0 ) AS spdza,
isnull( dz.spdzb, 0 ) AS spdzb,
isnull( sy.syje, 0 ) AS syje,
isnull( sy.spdj, 0 ) AS spdj,
isnull( ys.je, 0 ) + isnull( dz.wcdz, 0 ) + isnull( dz.spdza, 0 ) - isnull( sy.syje, 0 ) - isnull( sy.spdj, 0 ) AS kyje
FROM
( SELECT xm, km, nf FROM uf_jfys UNION SELECT xm, km, nf FROM uf_jftzls ) t1
LEFT JOIN uf_jfsb xm ON xm.id = t1.xm
LEFT JOIN uf_km km ON km.id = t1.km
LEFT JOIN uf_jfys ys ON ys.xm = t1.xm
AND ys.km = t1.km
AND ys.nf = t1.nf
LEFT JOIN (
SELECT
xm,
km,
nf,
sum( CASE WHEN zt = 5 THEN dzje END ) AS wcdz,
sum( CASE WHEN zt > 1 AND zt < 5 AND dzje > 0 THEN dzje END ) AS spdza,
sum( CASE WHEN zt > 1 AND zt < 5 AND dzje < 0 THEN dzje END ) AS spdzb
FROM
uf_jftzls
GROUP BY
xm,
km,
nf
) dz ON dz.xm = t1.xm
AND dz.km = t1.km
AND dz.nf = t1.nf
LEFT JOIN (
SELECT
xm,
km,
nf,
sum( CASE WHEN zt = 5 THEN je END ) AS syje,
sum( CASE WHEN zt > 1 AND zt < 5 THEN je END ) AS spdj
FROM
uf_jfsyls
GROUP BY
xm,
km,
nf
) sy ON sy.xm = t1.xm
AND sy.km = t1.km
AND sy.nf = t1.nf
8.1创建视图
CREATE VIEW jfyssyjd AS
8.2查询验证
8.3创建虚拟表前增加唯一值字段:
concat(t1.xm,'-',t1.km,'-',t1.nf) as id,
8.4更新视图
ALTER VIEW jfyssyjd AS
9.1创建虚拟表
9.2设置字段
9.3创建查询列表
9.4设置显示字段
9.5查询条件允许多选
9.6设置统计
9.7查看效果