Примеры выражений case
227
| 8 | CHK | 0.0478 |
| 9 | CHK | 0.0017 |
| 10 | CHK | 0.3229 |
| 12 | CHK | 0.5281 |
| 3 | MM | 0.1298 |
| 4 | MM | 0.3219 |
| 9 | MM | 0.5483 |
| 1 | SAV | 0.2694 |
| 2 | SAV | 0.1078 |
| 4 | SAV | 0.4137 |
| 8 | SAV | 0.2091 |
| 13 | SBL | 1.0000 |
++++
24 rows in set (0.00 sec)
Этот запрос вычисляет отношение остатка на
счете к общему остатку
для всех счетов одного типа. Поскольку для некоторых типов счетов,
таких как ссуды коммерческим предприятиям,
общий остаток может
равняться нулю, если на текущий момент все ссуды полностью выпла
чены, лучше всего включить выражение
case
, гарантирующее, что
знаменатель никогда не будет равен нулю.
Условные обновления
При обновлении строк таблицы вам иногда придется принимать реше
ния относительно того, какие значения
должны быть заданы в опреде
ленных столбцах. Например, после вставки новой транзакции долж
ны
измениться столбцы
avail_balance
,
pending_balance
и
last_activi
ty_date
таблицы
account
. С обновлением двух последних столбцов про
блем нет, но чтобы правильно изменить
столбец
avail_balance
, надо
проверить столбец
funds_avail_date
таблицы
transaction
и выяснить,
сразу ли доступны фонды транзакции. Допустим,
только что вставле
на транзакция с ID
999
, тогда изменить три столбца таблицы
account
можно с помощью
следующего выражения
update
:
1 UPDATE account
2 SET last_activity_date = CURRENT_TIMESTAMP(),
3 pending_balance = pending_balance +
4 (SELECT t.amount *
5 CASE t.txn_type_cd WHEN 'DBT' THEN 1 ELSE 1 END
6 FROM transaction t
7 WHERE t.txn_id = 999),
8 avail_balance = avail_balance +
9 (SELECT
10 CASE
11 WHEN t.funds_avail_date > CURRENT_TIMESTAMP() THEN 0
12 ELSE t.amount *
13 CASE t.txn_type_cd WHEN 'DBT' THEN 1 ELSE 1 END
14 END
15 FROM transaction t
16 WHERE t.txn_id = 999)