Я пытаюсь поместить оператор select в кейс, но не могу правильно его выразить.
Первый оператор case в порядке, но проблема со вторым.
Может кто-нибудь помочь мне с правильным синтаксисом,
select u.unit_id,
u.order_code,
u.order_item,
u.roll_sheet,
u.date_wound,
u.date_shipped,
u.unit_status,
u.warehouse_code,
(case
when u.unit_id_turnup is not null then
(select u1.onput_id
from unit u1
where u.unit_id_turnup = u1.unit_id)
else
u.onput_id
end) "onput id",
(case
when u.unit_id_turnup is not null then
(select CASE WHEN U1.UNIT_ID_TURNUP IS NOT NULL
from unit u1 then (select u3.onput_id
from unit u3
where u1.unit_id_turnup = u3.unit_id) else u1.onput_id)
else
u.onput_id
end) "onput id2",
from unit u
Не могли бы вы немного подсказать, как @jamieDrq
Примеры данных, желаемые результаты и объяснение логики, которую вы хотите реализовать, помогут. Кроме того, объясните проблему, с которой вы столкнулись.
Я могу предположить, что код, который вы намереваетесь, это:
select . . . ,
coalesce(u1.onput_id, u.onput_id) as onput_id,
coalesce(u2.onput_id, u1.onput_id, u.onput_id) as onput_id2
from unit u left join
unit u1
on u.unit_id_turnup = u1.id left join
unit u2
on u1.unit_id_turnup = u2.id
Без выборочных данных и четкого объяснения это действительно просто предположение. Однако, похоже, это то, что вы пытаетесь сделать.
Это сработало так, как мне было нужно, большое спасибо @Gordon Linoff
Ваше утверждение
case when
искажено во втором запросе (CASE WHEN {} ELSE {} END
), и у вас естьFROM
в середине. Ваш запрос может быть лучше решен с помощьюleft join
.