使用oracle在子查询中排序

Order by in sub query using oracle

我试图在对子查询的记录进行排序后从中获取值,但是在执行查询时发生了以下情况: ORA-00907: 缺少右括号

查询是:

select S.value , nvl((select D.value  from D
                join  T on D.subID = t.SubID
                where  D.subid2 = s.subid2 and t.subid3 = s.subid3    and rownum = 1 order by t.id),0 ) value

from   S

子查询中不能有 ORDER BY 子句。

看看这样的事情是否有帮助:使用 CTE(因为它 看起来 更好一些;可以是 普通 子查询,如果你想要)计算所有行的序号,按t.id列值排序。在外部(主)查询中,select 行的 rn = 1(应该 act 就像你的 ORDER BY t.id + rownum = 1)。

WITH
   temp
   AS
      (SELECT s.VALUE s_value,
              d.VALUE d_value,
              ROW_NUMBER () OVER (ORDER BY t.id) rn
         FROM d
              JOIN t ON d.subid = t.subid
              JOIN s
                 ON     s.subid2 = d.subid2
                    AND s.subid3 = t.subid3)
SELECT s_value, NVL (d_value, 0) d_value
  FROM temp
 WHERE rn = 1

如果您使用的是 Oracle 12c 或更高版本,则可以使用 FETCH FIRST... 子句。

SELECT S.VALUE,
       NVL ((  SELECT D.VALUE
                 FROM D JOIN T ON D.subID = t.SubID
                WHERE D.subid2 = s.subid2 AND t.subid3 = s.subid3
             ORDER BY t.id
                FETCH FIRST 1 ROWS ONLY),
            0)    VALUE
  FROM S