pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
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.
*
*

view thread (3+ messages)  latest in thread

Message-ID: <4D0A28F0.3020205@planit.com.br>
Permalink:  ../4D0A28F0.3020205@planit.com.br/
Also on:    postgresql.org/message-id/4D0A28F0.3020205@planit.com.br

 · 

reply

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