я есть таблицы ::Обновление таблицы с использованием случая и условий (POSTGRESQL)
CREATE TABLE emp1
(
eid integer NOT NULL,
ename character varying(20),
sid integer,
ssid integer,
CONSTRAINT pk_eid PRIMARY KEY (eid)
);
CREATE TABLE leave_type
(
eid integer,
lid integer,
lnum integer,
emp_bal integer,
sno serial NOT NULL,
CONSTRAINT pk_sno PRIMARY KEY (sno),
CONSTRAINT fk_eid FOREIGN KEY (eid)
REFERENCES emp1 (eid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);//emp_bal-->employee balance leaves which is considered as 8
CREATE TABLE result
(
eid integer,
lid integer,
sd date,
ed date,
sida boolean,
ssida boolean,
rsno serial NOT NULL,
CONSTRAINT pk_rsno PRIMARY KEY (rsno)
);
вставленной данные
emp1
-----
eid | ename | sid | ssid
-----+-------+-----+------
1 | a | 2 | 8
3 | c | 4 | 9
2 | b | 3 | 8
4 | d | 2 | 8
5 | e | 2 | 8
6 | f | 4 | 9
(6 строк)
leave_type
----------
eid | lid | lnum | emp_bal | sno
-----+-----+------+---------+-----
1 | 0 | 1 | 8 | 1
3 | 0 | 1 | 8 | 2
5 | 0 | 1 | 8 | 3
1 | 1 | 1 | 8 | 4
1 | 2 | 2 | 8 | 5
(5 rows)
result
-------
eid | lid | sd | ed | sida | ssida | rsno
-----+-----+------------+------------+------+-------+------
1 | 0 | 2013-01-01 | 2013-01-01 | t | f | 1
3 | 0 | 2013-01-09 | 2013-01-09 | t | f | 2
5 | 0 | 2013-01-11 | 2013-01-11 | t | f | 3
1 | 1 | 2013-02-14 | 2013-02-14 | t | f | 4
1 | 2 | 2013-03-15 | 2013-03-16 | f | t | 5
(5 rows)
Запрос:
Я хочу, чтобы таблица утверждения обновить
CREATE TABLE approval
(
eid integer,
lid integer,
asid integer,
bal integer
);
как выход
eid | lid | sid |bal
-----+-----+---+--
1 | 0 | 2 | 7
3 | 0 | 4 | 7
5 | 0 | 2 | 7
1 | 1 | 2 | 6
1 | 2 | 8 | 4
(5 rows)
условия :: я попробовал этот запрос для получения SID в таблице утверждения, как указано ниже :
CASE WHEN r.sida='t'
THEN (update approval set a.asid=e.sid where a.eid=e.eid from emp1 e,approval a)
WHEN r.ssida='t'
THEN (update approval set a.asid=e.ssid where a.eid=e.eid from emp1 e,approval a)
ELSE 0
END
я хочу даже столбец баланс должен быть обновлен базирование на с.и.д. проверки, т.е..,
СЛУЧАЙ если r.sida = «т», то BAL = emp1.emp_bal-1 и emp_bal в emp1 должен быть обновлен до последней значение бАЛ утверждения иначе, если r.ssida = «т» то BAL = emp_bal-2 и emp_bal в emp1 должен быть обновлен до последней стоимости бАЛ утверждения
есть ли способ решить эту проблему?
, наконец, я хочу видеть все листовки сотрудников, которые одобрены и кто его одобрил, и там баланс оставляет слева!
Полные детали в [SQL FIDDLE] (http://sqlfiddle.com/#!12/3e6a7/18)
Я удалил свой ответ и downvote после ваших уточнений. Ваше обновление имеет смысл. Кто-то еще может заглянуть в него. –
Спасибо u .. @ craig ringer –