2.20视图学习

在实习项目开发时(genexus),企业的表只有查询的权限,所以要基于公司的表建视图,基于有子表的表建立的视图没有了主表和子表的联系,为还原以前的表的统计和状态展示效果,采用下面的建表

CREATE OR REPLACE VIEW QTA_NPPROLIBSEQASITEM_SUMMARY AS -- 工序物料加权金额汇总视图
SELECT
S.MPM_PL_DPTCOD AS QTA_NPPLS_DPTCOD,
S.MPM_PL_TYPCOD AS QTA_NPPLS_TYPCOD,
S.MPM_PL_MATCOD AS QTA_NPPL_MATCOD,
S.MPM_PL_VERCOD AS QTA_NPPL_VERCOD,
S.MPM_PL_SORTCOD AS QTA_NPPL_SORTCOD,
S.MPM_PL_PSEQID AS QTA_NPPL_PSEQID,
S.MPM_PL_PSEQCOD AS QTA_NPPL_PSEQCOD,
S.MPM_PL_PSEQDSC AS QTA_NPPL_PSEQDSC,
S.MPM_PL_PSEQMANHR AS QTA_NPPL_PSEQMANHR,
S.MPM_PL_PSEQBFRATE AS QTA_NPPL_PSEQBFRATE,
S.MPM_PL_PSEQCPGSVALUE AS QTA_NPPL_PSEQCPGSVALUE,
COALESCE(SUM(PS.MPM_PL_PSEQALIASAMT), 0) AS QTA_NPPLS_AMT, -- 加权金额之和,未匹配时为0
CASE
WHEN COUNT(PS.MPM_PL_PSEQALIASAMT) = 0 THEN 5 -- 无记录情况
WHEN COUNT(CASE WHEN PS.MPM_PL_PSEQALIASAMT = 0 THEN 1 END) > 0 THEN 1 -- 存在0的情况
ELSE 10 -- 其他情况
END AS STATUS -- 状态列
FROM
booutest.MPM_PROCESSLIBRARYSEQ S
LEFT JOIN      //采用左连接的方式保存主表数据
booutest.MPM_PROCESSLIBRARYPSEQAILASITM PS
ON
S.MPM_PL_MATCOD = PS.MPM_PL_MATCOD -- 根据物料编号关联
AND S.MPM_PL_PSEQID = PS.MPM_PL_PSEQID -- 根据工序流水号关联
GROUP BY
S.MPM_PL_DPTCOD, -- 按部门代码分组
S.MPM_PL_TYPCOD, -- 按工艺类型分组
S.MPM_PL_MATCOD, -- 按物料编号分组
S.MPM_PL_VERCOD, -- 按工艺版本分组
S.MPM_PL_SORTCOD, -- 按工艺种类分组
S.MPM_PL_PSEQID, -- 按工序流水号分组
S.MPM_PL_PSEQCOD, -- 按工序编码分组
S.MPM_PL_PSEQDSC, -- 按工序描述分组
S.MPM_PL_PSEQMANHR, -- 按工序人工小时分组
S.MPM_PL_PSEQBFRATE, -- 按工序基本费率分组
S.MPM_PL_PSEQCPGSVALUE; -- 按工序成本价值分组
为了在视图中添加一个状态列,判断 PS.MPM_PL_PSEQALIASAMT 列中是否存在 0 值,可以在聚合函数外部添加一个子查询或相关逻辑来检查 PS.MPM_PL_PSEQALIASAMT 列。对于状态列的逻辑,

需要考虑三种情况:

  1. 如果 PS.MPM_PL_PSEQALIASAMT 列中存在 0,则状态为 1。
  2. 如果 PS.MPM_PL_PSEQALIASAMT 列中没有 0,但有其他值,则状态为 10。
  3. 如果 PS.MPM_PL_PSEQALIASAMT 列没有记录,则状态为 5
    具体代码解释:
    1. 状态列的逻辑:

      • WHEN COUNT(PS.MPM_PL_PSEQALIASAMT) = 0 THEN 5:如果 PS.MPM_PL_PSEQALIASAMT 列没有任何记录,则状态为 5。
      • WHEN COUNT(CASE WHEN PS.MPM_PL_PSEQALIASAMT = 0 THEN 1 END) > 0 THEN 1:如果存在 0,则状态为 1。
      • ELSE 10:如果没有 0 且有其他值,则状态为 10。
    2. 聚合函数:

      • COALESCE(SUM(PS.MPM_PL_PSEQALIASAMT), 0) 用于计算加权金额总和,如果没有匹配的记录则返回 0。


posted @ 2025-02-20 16:56  听着DJ读童话  阅读(9)  评论(0)    收藏  举报