2017-05-09 4 views
2

私は2つのテーブル "animal_breeds"と "ztmp.ztmp_509810_anims_out"を持っています。 「動物の繁殖」において、すべての動物は、キーおよび品種の名前およびパーセンテージを有する。いくつかの動物は異なる割合で2種類の品種を有するかもしれない。今の動物のキーに基づいて、私は別のテーブルからテーブルを更新する

update ztmp.ztmp_509810_anims_out 
set 
    alt_id1 = ab.breed 
    ,alt_id2 = pcnt 
    ,alt_id3 = ab.breed 
    ,alt_id4 = pcnt 
    ,alt_id5 = ab.breed 
    ,alt_id6 = pcnt 
    ,alt_id7 = ab.breed 
    ,alt_id8 = pcnt 

from animal_breeds ab 
where ab.soc_code = ztmp_509810_anims_out.soc_code and ab.animals_key = ztmp_509810_anims_out.animals_key 
    and ab.soc_code = 'AUNDB'; 

は私がのために使用することができ、私は間違っている知っている、このコードを使用しています

enter image description here

「ztmp.ztmp_509810_anims_out」更新する「animals_breeds」更新ステートメント内のループ?

+0

なぜあなたはループが必要だと思いますか?.. –

+0

@ Vao Tsun - ループを使用するのは私の推測です。私はループを使用する必要はありませんが、それ以外の方法で解決する方法を理解することはできません... –

+0

あなたはあまりにも有益ではない - 問題を記述する? –

答えて

3
UPDATE ztmp.ztmp_509810_anims_out AS z 
SET soc_code = q.soc_code, 
    animals_key = q.animals_key, 
    alt_id1 = breeds[1], 
    alt_id2 = pcnts[1], 
    alt_id3 = breeds[2], 
    alt_id4 = pcnts[2] 
FROM (SELECT soc_code, animals_key, 
      array_agg(breed) breeds, array_agg(pcnt) pcnts 
     FROM animal_breeds 
     GROUP BY soc_code, animals_key 
    ) q 
WHERE z.soc_code = q.soc_code 
    AND z.animals_key = q.animals_key; 

ように存在し、animals_key回以上の2つの品種もbreeds[3]pcnts[3]を追加することができます。

+0

uf!私はOPが参加してcteから更新したいと思った: –

+0

@Laurenz Albe - 私たちはこれを挿入なしで更新ステートメントを使って行うことができますか? –

+0

私は答えを 'UPDATE'ステートメントとして書き直しました。 –

関連する問題