Skip to content

SQL示例

为了方便大家更快速的kaifaBI报表,我们在本文档中列举了一些通过信马数据开发报表的SQL示例,大家可以参考使用。

获取表中的数据

获取主表字段

sql
select 字段标识1, 字段标识2,...
from 数据库名称.主表表名
  1. 字段标识1字段标识2 等替换为需要获取的主表字段的唯一标识,多个字段之间以英文逗号 , 隔开
  2. 主表表名 替换为需要获取的数据的主表表名
  3. 数据库名称取决于你所使用的平台环境,目前信马共有 2 个使用环境,你可以参考下表找到自己所需要的数据库名称
环境名称数据库名称公司
信马(syma.hisense.com)symauser海信集团除视像公司以外的员工
视像UAD(sxuad.hisense.com)prduad视像科技员工

获取子表字段

信马中的每个主表与每个子表在数据库中都是独立的表,主子表之间依靠 main_id 字段建立关联关系。

比如,获取主表中某字段的值 = 一月时,所有符合条件的行的子表单数据:

sql
select * from 主表表名;
select * from 子表表名 t where t.main_id in(select ID from 主表表名 m where m.条件字段标识 ='一月');
  1. 替换 主表表名 为子表所在主表的表名
  2. 替换 子表表名 为需要获取数据的子表表名
  3. 替换 条件字段标识 为主表中用作筛选条件的主表字段的唯一标识

获取流程字段

sql
SELECT
    /* 区域1:流程字段 */
    aht.task_name as "当前节点名称",
    aht.task_assignee_cn as "当前节点处理人姓名",
    substr(ahp.proc_def_id_, 0, instr(ahp.proc_def_id_, ':') - 1)  as "流程编码",
    ahp.duration_   as "流程总用时",
    ...

    /* 区域2:对流程状态的筛选 */
    CASE
        WHEN end_time_ IS NULL THEN
            '处理中'
        WHEN end_time_ IS NOT NULL
             AND delete_reason_ IS NOT NULL THEN
            '已终止'
        WHEN end_time_ IS NOT NULL
             AND delete_reason_ IS NULL THEN
            '已结束'
        ELSE
            '未知状态'
    END as "流程状态",

    /* 区域3:需要获取的表单字段 */
    f.title  as "表单标题",
    f.created_name as "提交人姓名",
    json_value(f.成员字段, '$."userName"') as "成员字段-姓名",
    ...

/* 区域4 */
FROM
    SYMAUSER.主表表名  f
    INNER JOIN SYMAUSER.pan_relate_proc_inst_page   pa ON pa.page_code = '主表表名'
                                               AND pa.table_data_id = f.id
    INNER JOIN SYMAUSER.act_hi_procinst             ahp ON ahp.proc_inst_id_ = pa.proc_inst_id
    LEFT JOIN (
        SELECT
            aht.name_           AS task_name,
            listagg(aht.assignee_, ',') AS task_assignee,
            listagg(u.user_name, ',') AS task_assignee_cn,
            to_char(aht.start_time_, 'yyyymmdd hh24:mi:ss') AS task_start_time,
            listagg(aht.owner_, ',') AS task_owner,
            aht.task_def_key_   AS taskdefinitionkey,
            aht.proc_inst_id_
        FROM
            SYMAUSER.act_hi_taskinst   aht
            LEFT JOIN SYMAUSER.pan_user          u ON u.login_name = assignee_
        WHERE
            aht.end_time_ IS NULL
        GROUP BY
            aht.name_,
            aht.task_def_key_,
            to_char(aht.start_time_, 'yyyymmdd hh24:mi:ss'),
            aht.proc_inst_id_
    ) aht ON aht.proc_inst_id_ = pa.proc_inst_id
  1. 在「区域1」中填入需要获取的流程字段,下表中列出了全部的流程字段
查看全部流程字段
字段标题字段标识备注
流程编码substr(ahp.proc_def_id_, 0, instr(ahp.proc_def_id_, ':') - 1)
流程实例IDpa.proc_inst_id
当前节点名称aht.task_name仅进行中的流程实例有值
当前节点处理人账号aht.task_assignee仅进行中的流程实例有值
当前节点处理人姓名aht.task_assignee_cn仅进行中的流程实例有值
当前节点到达时间aht.task_start_time仅进行中的流程实例有值
当前节点转交人aht.task_owner仅进行中的流程实例有值
当前节点编码aht.taskdefinitionkey仅进行中的流程实例有值
流程发起时间ahp.start_time_
流程结束时间ahp.end_time_仅已结束的流程实例有值
流程总用时ahp.duration_仅已结束的流程实例有值
流程发起人ahp.start_user_id_
  1. 在「区域2」中描述需要根据流程状态设置的筛选条件
  2. 在「区域3」中填入需要获取的表单字段,除了拖入的表单字段之外,还有有部分系统预置的默认字段也可以使用,在下表中列出
查看表单预置字段
字段标题字段标识
表单实例IDf.id
表单标题f.title
提交人姓名f.created_name
提交人账号f.created_by
提交人组织路径f.created_ldap_full_path
提交人组织编码f.created_org_code
提交时间f.created_date
最后修改时间f.modified_date

特殊字段的获取方式

成员字段

成员字段因数据保存的格式特殊,如果需要获取具体的内容,可以参考以下sql

sql
 /* 获取成员字段——姓名 */
json_value(成员字段, '$."userName"')
 /* 获取成员字段——账号 */
json_value(成员字段, '$."loginName"')
 /* 获取成员字段——部门全路径 */
json_value(成员字段, '$."ldapFullPath"')

图片预览地址

sql
select REPLACE(REPLACE(REPLACE(图片字段,'"/','"https://syma.hisense.com/minio/'),'["',''),'"]','') as 图片字段名称 from 表单表名  t
  1. 替换图片字段唯一标识
  2. 替换图片字段所在的表单表名
  3. 示例代码以信马生产环境为例,如果你所处其他环境,需要参照下表替换对应域名
环境名称主要用户替换域名
信马(syma.hisense.com)海信集团除视像公司以外的员工https://syma.hisense.com/minio/
视像UAD(sxuad.hisense.com)视像科技员工https://sxuad.hisense.com/minio/