Какой бардак! Вам действительно стоит подумать об использовании SQL форматировщика или, если вы не можете по какой-то причине, попытаться отформатировать код, который вы пишете вручную. Это нечитабельно.
В любом случае: хотя подзапросы выглядят как хороший выход ваших проблем, в общем - избегайте их. Большинство из них можно переписать, чтобы вы правильно объединяли задействованные таблицы.
Если вы решите использовать их в операторе SELECT
, вы должны убедиться, что каждая из них возвращает одно значение.
Это возвращает две или более строк:
SELECT (TRUNC (
TO_DATE (b.local_date, 'DD-MON-YY HH24:MI:SS')
- TO_DATE (w.local_date, 'DD-MON-YY HH24:MI:SS')))
AS timediff
FROM workflow_process w
INNER JOIN workflow_process b ON b.order_by = (w.order_by + 1)
WHERE w.change_id = b.change_id
AND w.change_id = 9946301
Как это исправить? Я не знаю, у меня нет твоих столов и я понятия не имею, чего ты хочешь. Простыми вариантами могут быть:
select distinct timediff ...
или
select max(timediff) ...
или
select ...
where rownum = 1
или какой-то другой вариант, но - опять же, это зависит от того, что мы не делаем. Не знаю.