Oracle针对不同条件的order by

2023-12-09

我有一个查询,我想根据条件进行两种订单。

例如,如果一个字段为 NULL,我需要下一个订单,如果不是,我必须下一个订单。我怎样才能做到呢?

select *
  from table_1 t
  order by (if  t.field1 is null then
                   order by t.field2 DESC, field3 ASC
            else 
                  order by t.field4 ASC, field5 DESC)

这是示例代码:我想根据FIELD1的值做出不同的顺序(ASC/DESC和不同的列)

EXAMPLE

有条件的

ID FIELD1  FIELD2  FIELD3  FIELD4  FIELD5
1   1       2       3       4       5
2   NULL    6       7       8       9

DATA

ID PARENT_ID DATA1 DATA2 DATA3
1  1         X     Y     J
2  1         Z     W     U
3  2         XY    YX    O
4  2         ZW    WZ    I

select d.*
  from data d, conditional c
 where d.parent_id = c.id
   and d.parent_id = 1
order by
       case 
           when c.field1 is null then
              data1 asc, data2 desc
           else
              data3 asc, data1 desc
       end

在此示例中,我选择数据行 1 和 2(父 id = 1 的行)。 现在我已经做出了这个决定,我想根据 CONDICTIONAL.FIELD1 列的值对 DATA 列进行排序。我希望现在更干净。

当然这个查询不起作用,但这就是“我需要的”。


你可以有CASE构造在ORDER BY条款:

SQL> SELECT * FROM EMP T
  2  ORDER BY
  3  CASE
  4     WHEN COMM IS NULL
  5     THEN SAL
  6     ELSE EMPNO
  7  END
  8  /

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30

14 rows selected.

NOTE: 照顾好DATA TYPE中的列数ORDER BY clause.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle针对不同条件的order by 的相关文章

  • 如何持续交付基于SQL的应用程序?

    我希望将持续交付概念应用到我们正在构建的 Web 应用程序中 并想知道是否有任何解决方案可以保护数据库免受意外错误提交的影响 例如 删除整个表而不是单个记录的错误 根据持续交付原则 如何限制这个问题的影响 即应用程序逐渐部署在基础设施的各个
  • Hive 中的 CASE 语句

    好的 我有以下代码来用二进制标志标记表中具有最高 Month cd 的记录 Select t1 month cd t2 max month cd CASE WHEN t2 max month cd null then 0 else 1 en
  • SQLPlus 中的运行循环

    我制作了一个 bash 脚本 它通过 SQLPlus 连接到数据库并运行一个包含 For 循环的 SQL 脚本 如下所示 但是一旦运行它 它就会卡在循环的 BEGIN 中 如下所示 我尝试直接通过SQLPlus运行 结果是一样的 那么任何人
  • GRANT EXECUTE 所需的权限

    我正在为需要能够创建和删除过程但也向其他用户授予执行权限的用户创建一个组 GRANT CREATE PROCEDURE TO xxx xxx GRANT ALTER ON SCHEMA dbo TO xxx xxx 但是 我需要向组授予什么
  • SQL查询获取列的精度值

    我需要一个 SQL 查询来获取某些列的精度值 我主要关心十进制类型列 并且我需要相同的精度值 我意识到在某些版本和数据库服务器供应商中可以这样做 如果您能列出其中的一些 那就太好了 对于 SQL 服务器 select precision f
  • java为oracle VARCHAR2返回空字符串值

    我有以下代码 它似乎工作正常 但它不显示 personCode 字符串的任何值 PERSON CODE 是 Oracle 9i 数据库中的 VARCHAR2 我在我的项目中使用 Java SE 1 7 和 ojdbc7 jar 我是 Jav
  • 如何编写一个简单的版本控制系统?

    我想做一个简单的版本控制系统 但我不知道如何构建我的数据和代码 这是一个简短的例子 用户登录 User has two options when uploading a file 提交新文件 提交文件的新版本 用户应该能够看到树 版本不同
  • Oracle数据库中的自增主键

    我想在 SQL Server 的列中实现标识或自动递增值 CREATE TABLE RollingStock Id NUMBER IDENTITY 1 1 Name Varchar2 80 NOT NULL 如何才能做到这一点 正如 Orb
  • SSRS报告不显示数据

    我刚刚创建了 SQL Server 2005 SSRS 报告 数据未显示在预览窗格中 数据集是根据字符串参数从存储过程正确填充的 我可以在数据窗格中执行它 在预览窗格中运行报表时 会显示正确的行数 但单元格的内容不包含任何数据 源数据集基于
  • oracle中有没有相当于sp_getapplock、sp_releaseapplock的

    我需要能够在 Oracle 中的会话级别 事务范围之外 使用自定义锁 在 MSSQL 中 我使用 sp getapplock sp releaseapplock 如何在 Oracle 中实现相同的功能 DBMS LOCK 包 这将做你想做的
  • 获取每件商品的最新价格

    我有一张桌子 ItemID PurchaseDate Price 001 03 17 2013 19 00 002 03 17 2013 14 00 001 03 18 2013 13 00 002 03 18 2013 15 00 001
  • Oracle 函数编译成功,但在执行 PLS-00221 时抛出错误:不是过程或未定义

    我有简单的oracle功能 create or replace function abs test func test in in number return number is test out number BEGIN test out
  • 从 blob 反序列化 java 对象

    首先 我很抱歉 我要问一些愚蠢的问题 我根本不懂java 也不知道我们是否可以问这样的问题 如果没有 删除我的主题 oracle中有一个存储blob的表 它是二进制的 我能够解码它 输出看起来像这样 sr com epam insure c
  • 在 JSP 中迭代列表对象

    我正在做一个项目来尝试自学 spring 和 struts 我目前卡在 JSP 页面上 我有一个 pojo 类 其中包含带有 getter setter 的变量 eid 和 ename 我还有一个 sql 中的表 其具有相同的值和六个填充行
  • MySQL 多个 IN 条件对同一个表进行子查询

    我有多个带有子查询的 IN 条件 SELECT S name S email FROM something S WHERE 1 NOT IN SELECT id FROM tags WHERE somethingId S id AND 2
  • LINQ-to-SQL 是否支持组合查询?

    作为一名不懂 C 的程序员 我对 LINQ 查询的求值语义很好奇 如下所示 var people from p in Person where p age lt 18 select p var otherPeople from p in p
  • 使用聚合函数时减少 Athena 扫描的数据量

    以下查询扫描 100 MB 的数据 select from table where column1 val and partition id 20190309 然而 下面的查询扫描了 15 GB 的数据 有超过 90 个分区 select
  • 使用 sql 查询选择最近 30 天

    我正在查找过去 30 天内周一 周二 周三 周四 周五 周六 周日的数量 我可以在没有实际数据库表的情况下选择最近 30 天的日期和星期几吗 就像是 SELECT everything between convert date GETDAT
  • 对时间序列数据重新采样

    我有一个以毫秒为单位的时间序列列表 我想对时间序列进行重新采样并对组应用平均值 我如何在 Postgres 中实现它 重新采样 是指聚合一秒或一分钟内的所有时间戳 一秒或一分钟内的所有行形成一组 表结构 date x y z Use dat
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable

随机推荐

  • Java中的正则表达式匹配器\G(上一场比赛的结束)的例子会很好[重复]

    这个问题在这里已经有答案了 你有边界匹配器 G 的任何有用的例子吗 请给我一些现实世界的例子 Java 源代码值得赞赏 从 掌握正则表达式 Jeffrey E F Friedl 中 我得到了一个解析 HTML 的有用示例 但我不确定如何翻译
  • iOS 8 旋转方法弃用 - 向后兼容性

    在iOS 8中 界面旋转的方法有已弃用 这包括 willRotateToInterfaceOrientation duration didRotateFromInterfaceOrientation willAnimateRotationT
  • 使用 LINQ 从 XML 文件中选择元素

    我有这样的 XML 结构
  • Python:存储大数据结构

    我目前正在用 python 做一个项目 该项目使用相对较大的字典 大约 800 MB 我尝试使用 pickle 来存储其中一本字典 但出现了 MemoryError 在 python 中保存此类文件的正确方法是什么 我应该使用数据库吗 Py
  • 如何从 Bash 中的字符串中删除最后 n 个字符?

    我有一个变量var在包含字符串的 Bash 脚本中 echo var some string rtf 我想删除该字符串的最后四个字符并将结果分配给一个新变量var2 以便 echo var2 some string 我怎样才能做到这一点 你
  • IBM DataPower 3.7.1.x 与 WCF 客户端相关的问题

    我尝试在 WCF 中使用 IBM DataPower 3 7 1 x Web 服务 但收到以下错误消息 找不到 System IdentityModel Tokens X509SecurityToken 令牌类型的令牌身份验证器 根据当前的
  • Nodejs 中的 setInterval 奇怪行为

    我想每秒运行一次函数 而函数本身需要 3 秒来执行 结果是每个间隔的执行时间相差
  • 同一 3D 轴中的多条独立线

    I would like to draw multiple independent lines in a 3D plot in Python It looks like 我是 Python 新手 你能帮我吗 您必须使用 matplotlib
  • PHP计算数组元素[重复]

    这个问题在这里已经有答案了 你好 有人可以解释一下为什么这会返回 一个数组由 0 个元素组成 arr array 1 3 5 count count arr if count 0 echo An array is empty else ec
  • 使 glReadPixel() 运行得更快

    我想要一种非常快速的方法来为我的应用程序捕获 openGL 帧缓冲区的内容 一般来说 glReadPixels 用于将framebuffer的内容读取到缓冲区中 但这很慢 我试图通过创建 4 个线程使用 glReadPixels 从 4 个
  • 为什么我的 ListView 和 CheckBox id 变得混乱?

    我正在女巫单元中实现带有复选框的 ListView 但问题是 当我签入一个单元格并向下滚动列表时 它会变得混乱 其他单元格也会被检查 我需要在 getView 方法中做其他事情吗 这是我的 CustonAdapter public clas
  • 选择矩阵中一行的一些值

    在带有矩阵的 R 中 m lt matrix 1 20 ncol 4 colnames m lt letters 1 4 如果我只想选择一个值 它就可以了 像这样 subset m m 4 17 但如果我想要 3 个值 就会出现错误 看这个
  • JSTL c:out 不显示变量的值

    我正在关注教程关于春天我应该在控制器中设置一个变量 以便在呈现请求的 jsp 中打印 代码如下 Controller public class HelloController RequestMapping value hello htm p
  • 使用超线程运行模拟使运行时间加倍

    我使用用 python numpy cython 编写的模拟 由于我需要对许多模拟运行进行平均 因此我使用多处理模块来批量运行所有单独的模拟运行 在办公室 我有一个带 HT 的 i7 920 工作站 我家里有一台 i5 560 没有 我认为
  • 无法从 Node Js 加载 Javascript 和 CSS 文件

    我读过很多关于 无法从节点js加载js和css文件 的问题 看起来像一个愚蠢的路径错误 但由于我是节点js新手 我无法弄清楚它 我的所有文件都位于一个名为 d3 的文件夹下 有什么想法哪里出了问题吗 var http require htt
  • 我有两个错误:“UIWebview”没有可见的@interface

    我有两个错误 UIWebView 没有可见的 interface 声明选择器 highlightAllOccurencesOfString 另一个 UIWebView 没有可见的 interface声明选择器 removeAllHighli
  • 如何:后退按钮支持“Ajax”

    我有一个asp net ajax网站 它充满了在同一页面上发生的事情 无需重新加载页面 例如排序记录 分页 当用户转到同一站点中的另一个页面并按浏览器后退按钮时 如何使浏览器保存页面状态以使用预选选项 例如排序选项 分页中的页码 返回到该页
  • 我可以从 Graphics 对象中获取矢量数据吗?

    在 Flash 10 播放器中 假设我加载了一个只有十几条随机线的 Sprite 有什么方法可以检查 Sprite 的图形对象并找出这些线的位置吗 目前 我有一个疯狂的工作 我将线条绘制到位图并检查位图 但这是粗糙且昂贵的 不 又是 没有特
  • 伪造 Entity Framework 4.1 的 DbContext 来测试我的存储库

    我有一个基本存储库 所有实体存储库都继承自该存储库 在我的睾丸中 我创建了一个 Fake DbContext 和 Fake DbSet 来测试我的存储库 但是在我的 FakeDbContext 中实现一些方法时 我无法实现IDbContex
  • Oracle针对不同条件的order by

    我有一个查询 我想根据条件进行两种订单 例如 如果一个字段为 NULL 我需要下一个订单 如果不是 我必须下一个订单 我怎样才能做到呢 select from table 1 t order by if t field1 is null t