使用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
我试图在对子查询的记录进行排序后从中获取值,但是在执行查询时发生了以下情况: 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