#sql #oracle
Вопрос:
Это стол, который у меня есть
cnt_dealno | договорились | сумма |
---|---|---|
1 | азбука | 3,000 |
2 | азбука | 3,000 |
3 | азбука | 3,000 |
1 | защита | 5,000 |
2 | защита | 5,000 |
Вот как, я думаю, я бы это закодировал
select
case when cnt_dealno = '1' then amount
else amount = 0
end as new_amount
from tab
Что я пытаюсь сделать , так это когда cnt_dealno = 1
, тогда сумма не меняется. Но когда cnt_dealno
это не равно 1
, тогда сумма станет 0
.
Есть ли какой-нибудь способ закодировать это в SQL?
Ответ №1:
Должно быть
SQL> with test (cnt_dealno, dealno, amount) as
2 (select 1, 'ABC', 3000 from dual union all
3 select 2, 'ABC', 3000 from dual union all
4 select 3, 'ABC', 3000 from dual union all
5 select 1, 'DEF', 5000 from dual union all
6 select 2, 'DEF', 5000 from dual
7 )
8 select cnt_dealno, dealno, amount,
9 --
10 case when cnt_dealno = 1 then amount
11 else 0
12 end as new_amount
13 from test;
CNT_DEALNO DEA AMOUNT NEW_AMOUNT
---------- --- ---------- ----------
1 ABC 3000 3000
2 ABC 3000 0
3 ABC 3000 0
1 DEF 5000 5000
2 DEF 5000 0
SQL>
Как вы думаете, зачем вам нужен PL/SQL?
Комментарии:
1. Спасибо за комментарий, этот работает как заклинание. Я пытался сделать это в PL/SQL, поэтому я думаю, что мне нужен PL/SQL с ним. Извините за мою неопытность.
2. Никаких проблем, пожалуйста.