拓冰建站拓冰建站
首页 / 资讯中心 / 正文

FROM DUAL UNION ALL 是 Oracle 特有的写法,专门用来在 SQL 中手工构造一个固定的多行数据集(即“行值构造函数”)。

Oracle的FROM DUAL UNION ALL用于手工构造固定多行数据集借虚拟表DUAL和UNION ALL实现。在永洪报表中它确保维度标签即使无数据也完整显示配合LEFT JOIN无数据时金额为NULL避免报表空白。此写法为Oracle专属其他数据库需调整写法。行值构造函数FROM DUAL UNION ALLWITH dims AS ( SELECT 1 AS sort_id, 全部融资租赁资产 AS 分组1, 全部融资租赁资产 AS 行标签, all AS cat_code FROM DUAL UNION ALL SELECT 2, 按租赁物所属类别分类, 设备类, device FROM DUAL UNION ALL SELECT 3, 按租赁物所属类别分类, 其中道路运输设备, road FROM DUAL UNION ALL SELECT 4, 按租赁物所属类别分类, 其中乘用车, car FROM DUAL UNION ALL SELECT 5, 按租赁物所属类别分类, 商用车, truck FROM DUAL UNION ALL SELECT 6, 按租赁物所属类别分类, 消防、救护等特种车辆, empty FROM DUAL UNION ALL SELECT 7, 按租赁物所属类别分类, 轨道交通车辆含铁路运输设备, empty FROM DUAL UNION ALL SELECT 8, 按租赁物所属类别分类, 摩托车、电动车辆、非机动车, empty FROM DUAL UNION ALL SELECT 9, 按租赁物所属类别分类, 水上交通运输设备船舶海工设备, empty FROM DUAL UNION ALL SELECT 10, 按租赁物所属类别分类, 航空运输设备航空器及其配套设备, air FROM DUAL UNION ALL SELECT 11, 按租赁物所属类别分类, 医疗设备, medical FROM DUAL UNION ALL SELECT 12, 按租赁物所属类别分类, 通用机械设备, general FROM DUAL UNION ALL SELECT 13, 按租赁物所属类别分类, 工程机械设备, engineering FROM DUAL UNION ALL SELECT 14, 按租赁物所属类别分类, 农林机械设备, agriculture FROM DUAL UNION ALL SELECT 15, 按租赁物所属类别分类, 工业装备, industry FROM DUAL UNION ALL SELECT 16, 按租赁物所属类别分类, 基础设施及不动产, empty FROM DUAL UNION ALL SELECT 17, 按租赁物所属类别分类, 其中房屋, empty FROM DUAL UNION ALL SELECT 18, 按租赁物所属类别分类, 构筑物, empty FROM DUAL UNION ALL SELECT 19, 按租赁物所属类别分类, 其中道路, empty FROM DUAL UNION ALL SELECT 20, 按租赁物所属类别分类, 管道市政管道、水利管道, empty FROM DUAL UNION ALL SELECT 21, 按租赁物所属类别分类, 桥梁、隧道, empty FROM DUAL UNION ALL SELECT 22, 按租赁物所属类别分类, 坝、堰、水道、沟、洞, empty FROM DUAL UNION ALL SELECT 23, 按租赁物所属类别分类, 码头、台、站, empty FROM DUAL UNION ALL SELECT 24, 按租赁物所属类别分类, 在建工程设备类, empty FROM DUAL UNION ALL SELECT 25, 按租赁物所属类别分类, 在建工程非设备类, empty FROM DUAL UNION ALL SELECT 26, 按租赁物所属类别分类, 无形资产, intangible FROM DUAL UNION ALL SELECT 27, 按租赁物所属类别分类, 生物资产, biological FROM DUAL UNION ALL SELECT 28, 按租赁物所属类别分类, 其他资产, empty FROM DUAL ),用不可见字符来保持缩进直接 select ... union all永洪数据集里SQL脚本遵循的语法既不取决于永洪的版本也不取决于数据在服务器上的存储位置而是完全由您创建数据集时连接的“数据源”类型决定的。-- 科目维度完整 70 行 dim_subject AS ( SELECT 1 AS sort_id, 可控费用 AS kmmc, 可控费用 AS cond_feiyjbsx1, NULL AS cond_kemdl, NULL AS cond_kemmc UNION ALL SELECT 2, 差旅费, 可控费用, 差旅费, NULL UNION ALL SELECT 3, 聘请中介机构费, 可控费用, 聘请中介机构费, NULL UNION ALL SELECT 4, 其他聘请中介机构费, 可控费用, 聘请中介机构费, 其他聘请中介机构费 UNION ALL SELECT 5, 律师费, 可控费用, 聘请中介机构费, 律师费 UNION ALL SELECT 6, 招聘费, 可控费用, 聘请中介机构费, 招聘费 UNION ALL SELECT 7, 评估费, 可控费用, 聘请中介机构费, 评估费 UNION ALL SELECT 8, 诉讼费, 可控费用, 诉讼费, NULL UNION ALL SELECT 9, 使用权资产折旧, 可控费用, 使用权资产折旧, NULL UNION ALL SELECT 10, 电子设备运转费, 可控费用, 电子设备运转费, NULL UNION ALL SELECT 11, 物业管理费, 可控费用, 物业管理费, NULL UNION ALL SELECT 12, 其他回收租赁资产杂费等, 可控费用, 其他, NULL UNION ALL SELECT 13, 公杂费, 可控费用, 公杂费, NULL UNION ALL SELECT 14, 邮电通讯费, 可控费用, 邮电通讯费, NULL UNION ALL SELECT 15, 业务招待费, 可控费用, 业务招待费, NULL UNION ALL SELECT 16, 业务宣传费, 可控费用, 业务宣传费, NULL UNION ALL SELECT 17, 水电费, 可控费用, 水电费, NULL UNION ALL SELECT 18, 会议费, 可控费用, 会议费, NULL UNION ALL SELECT 19, 咨询费, 可控费用, 咨询费, NULL UNION ALL SELECT 20, 租赁费, 可控费用, 租赁费, NULL UNION ALL SELECT 21, 机动车辆运营费, 可控费用, 机动车辆运营费, NULL UNION ALL SELECT 22, 协会会费, 可控费用, 协会会费, NULL UNION ALL SELECT 23, 职工薪酬, 可控费用, 职工薪酬, NULL UNION ALL SELECT 24, 职工教育经费, 可控费用, 职工薪酬, 职工教育经费 UNION ALL SELECT 25, 职工福利费误餐费, 可控费用, 职工薪酬, 职工福利费误餐费 UNION ALL SELECT 26, 绿化费, 可控费用, 绿化费, NULL UNION ALL SELECT 27, 财产保险费, 可控费用, 财产保险费, NULL UNION ALL SELECT 28, 印刷费, 可控费用, 印刷费, NULL UNION ALL SELECT 29, 低值易耗品摊销, 可控费用, 低值易耗品摊销, NULL UNION ALL SELECT 30, 修理费, 可控费用, 修理费, NULL UNION ALL SELECT 31, 安全防范费, 可控费用, 安全防范费, NULL UNION ALL SELECT 32, 党建工作经费, 可控费用, 党建工作经费, NULL UNION ALL SELECT 33, 公证费, 可控费用, 公证费, NULL UNION ALL SELECT 34, 开办费, 可控费用, 开办费, NULL UNION ALL -- 非可控费用大类 SELECT 35, 非可控费用, 非可控费用, NULL, NULL UNION ALL SELECT 36, 职工薪酬, 非可控费用, 职工薪酬, NULL UNION ALL SELECT 37, 职工工资总额, 非可控费用, 职工薪酬, 基本工资 UNION ALL SELECT 37, 职工工资总额, 非可控费用, 职工薪酬, 效益工资 UNION ALL SELECT 37, 职工工资总额, 非可控费用, 职工薪酬, 其他职工工资 UNION ALL SELECT 38, 基本工资, 非可控费用, 职工薪酬, 基本工资 UNION ALL SELECT 39, 效益工资, 非可控费用, 职工薪酬, 效益工资 UNION ALL SELECT 40, 其他职工工资, 非可控费用, 职工薪酬, 其他职工工资 UNION ALL SELECT 41, 社会保险费, 非可控费用, 职工薪酬, 养老保险费 UNION ALL SELECT 41, 社会保险费, 非可控费用, 职工薪酬, 医疗保险费 UNION ALL SELECT 41, 社会保险费, 非可控费用, 职工薪酬, 失业保险费 UNION ALL SELECT 41, 社会保险费, 非可控费用, 职工薪酬, 工伤保险费 UNION ALL SELECT 41, 社会保险费, 非可控费用, 职工薪酬, 生育保险费 UNION ALL SELECT 42, 养老保险费, 非可控费用, 职工薪酬, 养老保险费 UNION ALL SELECT 43, 医疗保险费, 非可控费用, 职工薪酬, 医疗保险费 UNION ALL SELECT 44, 失业保险费, 非可控费用, 职工薪酬, 失业保险费 UNION ALL SELECT 45, 工伤保险费, 非可控费用, 职工薪酬, 工伤保险费 UNION ALL SELECT 46, 生育保险费, 非可控费用, 职工薪酬, 生育保险费 UNION ALL SELECT 47, 住房公积金, 非可控费用, 职工薪酬, 住房公积金 UNION ALL SELECT 48, 年金缴费, 非可控费用, 职工薪酬, 年金缴费 UNION ALL SELECT 49, 职工福利费, 非可控费用, 职工薪酬, 职工福利费 UNION ALL SELECT 50, 工会经费, 非可控费用, 职工薪酬, 工会经费 UNION ALL SELECT 51, 辞退福利, 非可控费用, 职工薪酬, 辞退福利 UNION ALL SELECT 52, 辅助薪酬, 非可控费用, 职工薪酬, 辅助薪酬 UNION ALL SELECT 53, 其他社会保险费, 非可控费用, 职工薪酬, 其他社会保险费 UNION ALL SELECT 54, 股份支付, 非可控费用, 职工薪酬, 股份支付 UNION ALL SELECT 55, 临聘人员工资, 非可控费用, 职工薪酬, 临聘人员工资 UNION ALL SELECT 56, 劳务派遣工资, 非可控费用, 职工薪酬, 劳务派遣工资 UNION ALL SELECT 57, 劳务派遣社会保险及公积金, 非可控费用, 职工薪酬, 劳务派遣社会保险及公积金 UNION ALL SELECT 58, 固定资产折旧费, 非可控费用, 固定资产折旧费, NULL UNION ALL SELECT 59, 无形资产摊销, 非可控费用, 无形资产摊销, NULL UNION ALL SELECT 60, 聘请中介机构费, 非可控费用, 聘请中介机构费, NULL UNION ALL SELECT 61, 外服服务费, 非可控费用, 聘请中介机构费, 外服服务费 UNION ALL SELECT 62, 审计费, 非可控费用, 聘请中介机构费, 审计费 UNION ALL SELECT 63, 上市费用, 非可控费用, 聘请中介机构费, 上市费用 UNION ALL SELECT 64, 长期待摊费用摊销, 非可控费用, 长期待摊费用摊销, NULL UNION ALL SELECT 65, 交易所年费及登记费, 非可控费用, 交易所年费及登记费, NULL UNION ALL SELECT 66, 董事会费, 非可控费用, 董事会费, NULL UNION ALL SELECT 67, 劳动保护费, 非可控费用, 劳动保护费, NULL UNION ALL SELECT 68, 税金, 非可控费用, 税金, NULL UNION ALL SELECT 69, 其他残障金, 非可控费用, 其他, 残障金 UNION ALL SELECT 70, 总计, NULL, NULL, NULL ),FROM DUAL UNION ALL是Oracle 特有的写法专门用来在 SQL 中手工构造一个固定的多行数据集即“行值构造函数”。拆开来看它的含义和用法如下1.DUAL是什么DUAL是 Oracle 中一个系统自带的虚拟表只有一行一列。它的作用就是让你在不需要查询任何真实表时也能执行SELECT语句比如计算SELECT 12 FROM DUAL。2.UNION ALL是什么UNION ALL是集合操作符用来把多个SELECT语句的查询结果纵向拼接在一起保留所有行不去重。3. 合在一起是什么意思SELECT ... FROM DUAL UNION ALL SELECT ... FROM DUAL就相当于逐行生成一张固定的临时“维度表”例如sqlSELECT 1 AS sort_id, 正常 AS label FROM DUAL UNION ALL SELECT 2, 关注 FROM DUAL UNION ALL SELECT 3, 次级 FROM DUAL实际返回的数据就是sort_idlabel1正常2关注3次级为什么在永洪报表中大量使用这种写法您在之前的脚本中看到的WITH dims AS (SELECT 1 ... FROM DUAL UNION ALL SELECT 2 ... )其核心目的是固定报表的维度行如五级分类正常/关注/次级/可疑/损失/总计等确保即使数据库中没有查询到任何数据报表上依然能显示出这些行标签。如果没有这种写法当base表查询结果为 0 行时整个UNION ALL结果会为空报表就会一片空白。而使用DUAL构造的固定行再配合LEFT JOIN即使无数据金额列返回NULL行标签依然存在满足您之前“维度列即使没有值也要完整显示”的需求。注这种写法是Oracle 专属的因为DUAL是 Oracle 系统表。如果您在永洪上连接的是其他数据库如 MySQL、SQL Server需要用对应的写法比如SELECT 1 AS id UNION ALL SELECT 2不加FROM DUAL。但鉴于您所有的表都是jbfsbb.rp_*且之前一直运行正常说明您的数据源就是 Oracle可以放心使用。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门