Изучаем sql


SELECT a.cust_id, a.product_cd, a.avail_balance /



Pdf көрінісі
бет199/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   195   196   197   198   199   200   201   202   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )

SELECT a.cust_id, a.product_cd, a.avail_balance /
> CASE
> WHEN prod_tots.tot_balance = 0 THEN 1
> ELSE prod_tots.tot_balance
> END percent_of_total
> FROM account a INNER JOIN
> (SELECT a.product_cd, SUM(a.avail_balance) tot_balance
> FROM account a
> GROUP BY a.product_cd) prod_tots
> ON a.product_cd = prod_tots.product_cd;
++++
| cust_id | product_cd | percent_of_total |
++++
| 10 | BUS | 0.0000 |
| 11 | BUS | 1.0000 |
| 1 | CD | 0.1538 |
| 6 | CD | 0.5128 |
| 7 | CD | 0.2564 |
| 9 | CD | 0.0769 |
| 1 | CHK | 0.0145 |
| 2 | CHK | 0.0309 |
| 3 | CHK | 0.0145 |
| 4 | CHK | 0.0073 |
| 5 | CHK | 0.0307 |
| 6 | CHK | 0.0017 |


Примеры выражений 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)


228

Достарыңызбен бөлісу:
1   ...   195   196   197   198   199   200   201   202   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет