首页 > 数据库 >实现在 Oracle 中合并数据格式的 SQL 查询

实现在 Oracle 中合并数据格式的 SQL 查询

时间:2023-07-24 21:05:39浏览次数:50  
标签:AREA 战车 PROG t1 数据表 NUM SQL Oracle 数据格式

背景

在 Oracle 数据库中,有时候需要将两个数据格式进行合并,使得一个数据表中的所有地区都能对应战车类型的数据,并将没有对应数据的地区数量填充为 0。本文将介绍如何通过一条 SQL 查询来实现这样的数据合并操作。

数据格式

我们有两个数据表,一个数据表的数据格式如下:

Table1:

AREA   USE   DATA_TYPE   PROG_NUM
地区1  战车  步战车      10
地区1  战车  水战车      10
地区1  战车  土战车      20
地区2  战车  步战车      10
地区2  战车  水战车      10
地区3  战车  步战车      9

另一个数据表的数据格式如下:

Table2:

name
步战车
水战车
土战车

我们的目标是根据 Table2 中的战车类型,在 Table1 中添加对应战车类型的数据,并将没有对应数据的地区数量填充为 0,最终得到如下合并后的数据格式:

合并后的数据格式:

AREA   USE   DATA_TYPE   PROG_NUM
地区1  战车   步战车      10
地区1  战车   水战车      10
地区1  战车   土战车      20
地区2  战车   步战车      10
地区2  战车   水战车      10
地区2  战车   土战车      0
地区3  战车   步战车      0
地区3  战车   水战车      0
地区3  战车   土战车      9

SQL 查询

要实现上述数据合并,我们可以使用 CROSS JOINLEFT JOIN 来完成。以下是具体的 SQL 查询代码:

SELECT
    t1.AREA,
    t1.USE,
    t2.name AS DATA_TYPE,
    COALESCE(t1.PROG_NUM, 0) AS PROG_NUM
FROM
    (
        -- 第一个数据表(Table1)
        -- 请将实际表名替换为你的表名
        SELECT AREA, USE, DATA_TYPE, PROG_NUM FROM Table1
    ) t1
CROSS JOIN
    (
        -- 第二个数据表(Table2)
        -- 请将实际表名替换为你的表名
        SELECT name FROM Table2
    ) t2
LEFT JOIN
    (
        -- 第一个数据表(Table1)的补充数据
        -- 请将实际表名替换为你的表名
        SELECT AREA, USE, DATA_TYPE, 0 AS PROG_NUM FROM Table1
    ) t3
ON t1.AREA = t3.AREA AND t1.DATA_TYPE = t3.DATA_TYPE
ORDER BY t1.AREA, t1.USE, t2.name;

在上述查询中,我们首先通过 CROSS JOIN 将 Table1 和 Table2 中的所有记录进行组合。然后,使用 LEFT JOIN 将组合后的结果与一个仅用于补充缺失数据的表连接,补充缺失的地区和战车类型,并将 PROG_NUM 设置为 0。最后,使用 COALESCE 函数来将 PROG_NUM 为 NULL 的记录填充为 0,并按照 AREA、USE 和 DATA_TYPE 进行排序。


标签:AREA,战车,PROG,t1,数据表,NUM,SQL,Oracle,数据格式
From: https://blog.51cto.com/u_14316134/6839249

相关文章

  • centos 7配置ORACLE动态链接库
    随便在一个目录下解压instantclient-basiclite-linuxx64.zip(一般下最新的就好啦)然后在/etc/ld.so.conf文件添加解压完文件的目录 在执行ldconfig就好了。是不是很简单.ORACLE版本低的时候插入数据也许会报这个错cx_Oracle,cursor.execute(sql)执行的时候编码错误:UnicodeEn......
  • oracle wm_concat(column)函数的使用
    oracle数据库中,使用wm_concat(column)函数,可以进行字段合并,下文对该功能的实现方法作了详细的介绍,供您参考学习。AD:51CTO学院:IT精品课程在线看! oraclewm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并,如果您对oracle......
  • Linux CentOS 7 卸载 PostgreSQL
    1、查看服务状态并停止服务systemctlstatuspostgresqlsystemctlstoppostgresql2、使用YUM命令卸载PostgreSQLyumremovepostgresql*3、验证RPM包是否卸载干净rpm-qa|greppostgresql4、删除PostgreSQL数据文件和配置文件目录(非必要)rm-rf/var/lib/p......
  • mysql在liunx下面的自动备份
    由于系统基本开发完成,为了保证数据安全,需要将数据库自动备份,以下是实现自动备份的步骤:一、在本地自动备份数据库1.使用mysql自带的服务mysqldump实现自动备份,首先使用vim命令编辑以下命令并且保存#!/bin/bashDB_USER='***'DB_PASSWORD='*******'DB_NAME='**......
  • Linux安装mysql 02
    1:新建目录: 2:下载Mysql数据库文件:wgethttps://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar:3:安装数据库文件解压文件tar-xvfmysql-5.7.39-1.el7.x86_64.rpm-bundle.tar yum-yinstallmysql-comm*.rpm 按照......
  • Mysql高级1-存储引擎
    一、Mysql体系结构 1.1、连接层最上层是一个客户端和链接服务,主要完成一些类似于链接处理,授权认证,及相关的安全方案,服务器也会为安全接入的而每个客户端验证它所具有的操作权限1.2、服务层第二层架构主要完成大多数的核心服务功能,如SQL接口,并完......
  • Linux CentOS 7 安装 PostgreSQL v14
    1、安装PostgreSQL的RPM资源库sudoyuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm2、安装PostgreSQLServersudoyuminstall-ypostgresql14-server3、初始化PostgreSQLsudo/usr/pgsql-14......
  • PostgreSQL 相关
    pgsql下载地址.net库nugetnpgsql4.1.12查询时表名要加"",否则会报关系"xx"不存在。heidisql列举数据库有错误,public并不是数据库名称。列举数据库sql:SELECTdatnameFROMpg_database;......
  • Qt mingw73_32 + MySql8.0 使用和对数据库操作 - 初窥篇1
    1、开发环境QtCreator4.8.2+Qt5.12.2+MySql8.0.332、设计背景现在已经有MySql8.0.33是64位的数据库,仅支持64位的程序,但是当前Qt程序编译环境是mingw73_3232位程序连接64位的数据库实例3、操作流程1)测试驱动代码+测试结果intmain(inta......
  • pgsql 把空换成其他值 coalesce函数
    SQL中的in、notin语句遇到null时的坑点_notinnull_shenzhou_yh的博客-CSDN博客 postgres判断null_PGSQL实现判断一个空值字段,并将NULL值修改为其它值_幼生期的博客-CSDN博客......