SQL示例
为了方便大家更快速的kaifaBI报表,我们在本文档中列举了一些通过信马数据开发报表的SQL示例,大家可以参考使用。
获取表中的数据
获取主表字段
sql
select 字段标识1, 字段标识2,...
from 数据库名称.主表表名
- 将
字段标识1
、字段标识2
等替换为需要获取的主表字段的唯一标识,多个字段之间以英文逗号,
隔开 - 将
主表表名
替换为需要获取的数据的主表表名 数据库名称
取决于你所使用的平台环境,目前信马共有 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.条件字段标识 ='一月');
- 替换
主表表名
为子表所在主表的表名 - 替换
子表表名
为需要获取数据的子表表名 - 替换
条件字段标识
为主表中用作筛选条件的主表字段的唯一标识
获取流程字段
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」中填入需要获取的
流程字段
,下表中列出了全部的流程字段
查看全部流程字段
字段标题 | 字段标识 | 备注 |
---|---|---|
流程编码 | substr(ahp.proc_def_id_, 0, instr(ahp.proc_def_id_, ':') - 1) | |
流程实例ID | pa.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_ |
- 在「区域2」中描述需要根据流程状态设置的
筛选条件
- 在「区域3」中填入需要获取的
表单字段
,除了拖入的表单字段之外,还有有部分系统预置的默认字段也可以使用,在下表中列出
查看表单预置字段
字段标题 | 字段标识 |
---|---|
表单实例ID | f.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
- 替换
图片字段唯一标识
- 替换图片字段所在的
表单表名
- 示例代码以信马生产环境为例,如果你所处其他环境,需要参照下表替换对应域名
环境名称 | 主要用户 | 替换域名 |
---|---|---|
信马(syma.hisense.com) | 海信集团除视像公司以外的员工 | https://syma.hisense.com/minio/ |
视像UAD(sxuad.hisense.com) | 视像科技员工 | https://sxuad.hisense.com/minio/ |