From: Luiz K. Matsumura <luiz@planit.com.br>
To: pgsql-sql@postgresql.org
Subject: UPDATE in a specific order
Date: Thu, 16 Dec 2010 12:57:52 -0200
Message-ID: <4D0A28F0.3020205@planit.com.br> (raw)
Hi,
I have a follow scenario:
CREATE TABLE table1 (
id integer
, vlpr numeric(10,2)
, vlab numeric(10,2)
, vlbx numeric(15,5)
, pct numeric(12,8)
);
CREATE TABLE table2 (
id integer
, fk_table1 integer
, tpop char(2)
, valor numeric(15,5)
);
insert into table1 VALUES ( 1, 200 , 0 , 0 , 1 );
insert into table2 VALUES
( 1, 1 , 'CR' , 100 )
, ( 2, 1 , 'BX' , 15 )
, ( 3, 1 , 'AC' , 40 );
I need to make update of table1 with data on table2 in the order of id
of table2
I´m trying to do an update like this:
UPDATE table1
SET vlab = vlab + CASE WHEN tHist.tpop IN ('BX' , 'DC')
THEN - tHist.valor
ELSE tHist.valor
END
, vlbx = vlbx + CASE WHEN tHist.tpop IN ('BX', 'DC')
THEN tHist.valor
ELSE 0
END
, pct = CASE WHEN tHist.tpop in ('AC', 'DC' )
THEN (vlpr - vlbx) / vlab
ELSE pct
END
FROM ( SELECT * FROM table2 ORDER BY id ) tHist
WHERE table1.id = tHist.fk_table1
The "FROM ( SELECT * FROM table2 ORDER BY id ) tHist" is a try to
force a specific order on table2 to update table1
but this isn´t working.
There are some way to do this with a UPDATE statement ?
Thanks in advance,
--
Luiz K. Matsumura
Plan IT Tecnologia Informática Ltda.
*
*
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: luiz@planit.com.br
Subject: Re: UPDATE in a specific order
In-Reply-To: <4D0A28F0.3020205@planit.com.br>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox