zoukankan      html  css  js  c++  java
  • where 子句或 on 子句中对某个字段进行条件判断映射

    1、需求:

    -- 协议主题表
    DROP TABLE IF EXISTS "dw"."agt_main";
    CREATE TABLE "dw"."agt_main" (
    "agt_id" bigserial, -- 协议编码
    "agt_type" varchar(2), -- 协议类型 取值见'协议类型代码表' 1 IC卡 2 自发码 99 其他
    "agt_status" varchar(2), -- 协议状态 取值见'协议状态代码表'
    "agt_date" varchar(30), -- 协议日期
    "agt_object" varchar(100), -- 协议对象 如果是账户类型, 就存账号; 如果是合同, 就存合同号
    "source_id" int8, -- 源系统编码
    "source" varchar(30), -- 系统来源代码
    PRIMARY KEY ("agt_id")
    )DISTRIBUTED BY ("agt_id");

    上表中 agt_type 取值1(代表IC卡)、2(自发码),但是相应的 '协议类型代码表' 只是excel 中的列表,并没有在数据库中生成 '协议类型代码表'

    所以,在进行 join 关联时,需要进行 case 判断(映射)。当然看情况,也是可以在数据库中生成 '协议类型代码表'的。

    2、例子

    # 在数据库中没有将 1 与 "IC卡",2 与 "自发码" 对应起来的表

    create table t_user(id serial, name varchar(20), type int);
    insert into t_user(name, type) values('张三', 1); # 1 代表 IC卡
    insert into t_user(name, type) values('李四', 2); # 2 代表 自发码
    
    create table t_msg(type_name varchar(20), msg varchar(20));
    insert into t_msg values('IC卡', '来自IC卡系统');
    insert into t_msg values('自发码', '来自自发码系统');
    
    select * from t_user u
    left join t_msg m
    on (case when m.type_name='IC卡' then u.type=1 when m.type_name='自发码' then u.type=2 end)

     # 当然也可以创建"类型表"将 1 与 "IC卡",2 与 "自发码" 对应起来

    ---

  • 相关阅读:
    ie条件注释
    浏览器兼容性
    ajax
    执行环境、变量对象、作用域链、闭包
    iPhone日历选择器效果
    fastclick源码分析
    zepto 事件模块源码分析
    阿拉伯数字转成中文数字 (支持1~9999)
    line-height学习
    运动的球(1)
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/13494848.html
Copyright © 2011-2022 走看看