`

oracle order by与union一起使用的用法

阅读更多
当使用union操作时,排序语句必须放在最后面才正确,如下:


只能在union的最后一个子查询中使用order by,而这个order by是针对整个unioning后的结果集的。So:
如果unoin的几个子查询列名不同,如
Sql代码 
select supplier_id, supplier_name 
from suppliers 
UNION 
select company_id, company_name 
from companies 
ORDER BY ?; 

这里的问号如果是company_name,则执行整个查询会报“company_name:invalididentifier”(当然,单独执行第二个含orderby的子查询是没有问题的);这是因为unioning后结果集的列名是以第一个参加union的子查询的列名为准的;orderby针对的是整个unioning后的结果集。对整个查询结果来说,无”company_name“这个字段
如果是supplier_name,则单独执行第二个含order by的子查询是会报“supplier_name:invalididentifier”的,而执行整个查询是没有问题的,因为orderby针对的是unioning后的整个结果集,而这“整个结果集”是有supplier_name这列的(以第一个union子查询的列名作为unioning后整个结果集的列名)

为了避免这样事情的发生,可以:
1 使用列序号代替实际列名。如:
Sql代码 
select supplier_id, supplier_name 
from suppliers 
UNION 
select company_id, company_name 
from companies 
ORDER BY 2; 

2、
或者可以这样:
select * from (SELECT SALING_DATE, JOB, NAME
FROM TABLE1
UNION
SELECT ARRIVE_DATE SALING_DATE, JOB, NAME
FROM TALBE2)
ORDER BY SALING_DATE;
分享到:
评论

相关推荐

    union all与order by用法

    UNION ALL 与 ORDER BY 用法详解 UNION ALL 和 ORDER BY 是 SQL 语言中的两个基本操作符,分别用于合并查询结果和排序数据。在 Oracle PL/SQL 中, UNION ALL 和 ORDER BY 的使用需要遵循一定的规则和限制。本文将...

    Oracle多行记录合并

    例如,你可以创建一个伪列,将行号与原列连接起来,然后使用`CONNECT BY`来合并它们。这种方法适用于数据有某种关联性的场景。 4. **自定义PL/SQL函数:** 对于更复杂的情况,可能需要编写自定义的PL/SQL函数来实现...

    oracle row_number用法

    ### Oracle Row_Number 函数详解 ...通过掌握其基本用法以及与其他窗口函数的结合使用,可以在数据处理和分析方面发挥重要作用。无论是简单的排序还是复杂的分组分析,`ROW_NUMBER()`都能够提供有效的解决方案。

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    Oracle数据库在处理多行记录合并、连接和聚合字符串时,有多种方法,下面将详细介绍其中的几种常见技术。 1. 被集合字段范围小且固定型 这种方法适用于字段值有限且已知的情况。通过使用`DECODE`函数,我们可以为每...

    Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数(转载)

    #### 三、OVER (PARTITION BY ..) 的使用方法 ##### 1. 分区概述 `OVER (PARTITION BY ...)` 的主要作用是定义一个分区集合,即对数据进行分组,然后在每个分区内执行相应的操作。例如,在以下示例中,我们根据 `...

    Oracle提高查询效率的方法

    "Oracle 提高查询效率的方法" Oracle数据管理系统作为...提高 Oracle 查询效率需要从多方面考虑,包括优化 SQL 语句、创建合理的索引、选择合适的基础表、调整 WHERE 子句的顺序、避免使用 DISTINCT 和 ORDER BY 等。

    oracle行列转换总结

    本文将深入探讨Oracle中实现行列转换的几种方法,包括使用`UNION ALL`、`MODEL`子句以及集合类型(`collections`),并提供具体的示例来帮助理解。 ### 1. 使用`UNION ALL`进行行列转换 `UNION ALL`是一种简单直接的...

    oracle行列转换

    下面将详细探讨在Oracle中实现行列转换的两种常见方法:使用DECODE函数的聚合查询和使用UNION操作符。 ### 一、使用DECODE函数的聚合查询 这种方法主要利用Oracle的DECODE函数,通过条件判断将特定的行值映射到...

    Oracle关键字用法整合

    ### Oracle关键字用法整合 #### 1. CONCAT **功能说明**:`CONCAT`用于连接两个或多个字符串。在Oracle中,可以使用`||`作为替代方式。 **示例**: ```sql SELECT CONCAT('%','') FROM dual; ``` 在示例中,由于`...

    oracle实现阶梯式累加

    SELECT NAME, DEPT, SALARY, SUM(SALARY) OVER (PARTITION BY DEPT ORDER BY NAME) TOTAL_SALARY FROM SALARY; ``` 解释一下这个查询语句: - `PARTITION BY DEPT`表示按照`DEPT`字段进行分组; - `ORDER BY NAME`...

    Oracle SQL最佳实践

    例如,当涉及到多表连接时,可以使用 `/*+ INDEX(cust_order PK_CUSTOMER_ORDER) */` 提示来强制使用特定的索引。 - **示例:** ```sql SELECT c.cust_nbr, name, order_nbr FROM customer c /*+ INDEX(cust_...

    Oracle行转列

    Oracle行转列 Oracle行转列是指在Oracle...Oracle行转列操作可以使用多种方法来实现,包括UNION ALL、MODEL、COLLECTION、AGGREGATE FUNCTION、LISTAGG、REGEXP_SPLIT等方法。这些方法可以满足不同的应用场景和需求。

    oracle 分析函数学习笔记

    在描述中提到的场景中,有几种不同的方法可以实现数据统计,包括通过程序处理、使用临时表和包、标准SQL的UNION以及Oracle特有的分析函数。每种方法都有其优缺点。例如,程序处理方法与数据库无关,但增加了开发工作...

    Oracle SQL练习题及答案_最全最新

    GROUP BY用于对数据进行分组,常与聚合函数(如COUNT、SUM、AVG、MAX、MIN)结合使用,如:`SELECT column, COUNT(*) FROM table GROUP BY column;` 将按column列的值分组,并计算每组的行数。 HAVING子句与WHERE...

    超详细Oracle教程

    - **分区查询**:介绍PARTITION BY子句的使用方法,以及如何实现数据分区。 - **集合运算符**:如UNION、INTERSECT、MINUS等用于组合多个结果集的操作。 #### 十、数据字典 - **Oracle数据字典概述**:介绍Oracle...

    超详细Oracle教程.pdf

    - **排序与限制结果集**:学习ORDER BY子句和LIMIT子句的使用,掌握如何对查询结果进行排序和限制返回的行数。 #### 第四章 单行函数 - **字符串函数**:包括UPPER、LOWER、SUBSTR等函数的使用,用于处理字符串数据...

    Oracle开发必备手册

    第二章排续数据则讲解了ORDER BY子句,用于按照特定字段对查询结果进行升序或降序排列,这对于数据分析和报表生成尤为重要。 第三章SQL单行函数涉及到了诸如字符串处理(LENGTH, SUBSTR, CONCAT),数值计算(ROUND...

    oracle 查询语句实例

    Oracle SQL是一种结构化查询语言,用于与Oracle数据库进行交互。在这个"oracle查询语句实例"的压缩包中,你将找到一系列实用的查询示例,帮助你深入理解和熟练掌握Oracle SQL的用法。 1. **基础查询** - `SELECT`...

Global site tag (gtag.js) - Google Analytics