2017-04-08 11 views
0

私は完全なdatatableデータ行を賢明に更新したいと思いますが、どうすればよいですか?sql列を他の列の合計で更新する

は、私が欲しいものを参照してください:

enter image description here

のみ行方向が、そのは、NULL値で作業していないと示す合計データのためのこのコード。

select 
    sum(tc6671 + tf6671 + pc6671 + pf6671 + tc8572 + tf8572 + pc8572 + pf8572 + 
     tc6672 + tf6672 + tc6673 + tf6673 + pc6673 + pf6673 + pc6674 + pf6674 + tc5852 + tf5852 + 
     tc5853 + tf5853) as Test 
from 
    cmt_7th; 

しかし、特定の列をすべての合計データで更新したいとします。

私はこのコードを試みたが、失敗しました:

update cmt_7th 
set roll = sum(tc6671+tf6671+pc6671+pf6671+tc8572+tf8572+pc8572+pf8572+ 
       tc6672+tf6672+tc6673+tf6673+pc6673+pf6673+ 
       pc6674+pf6674+tc5852+tf5852+tc5853+tf5853); 

をそして私は、このコードでも試みた:

UPDATE c 
SET c.total = c.tc6671+c.tf6671+c.pc6671+c.pf6671+c.tc8572+c.tf8572+c.pc8572+ 
       c.pf8572+c.tc6672+c.tf6672+c.tc6673+c.tf6673+c.pc6673+c.pf6673+ 
       c.pc6674+c.pf6674+c.tc5852+c.tf5852+c.tc5853+c.tf5853 
FROM cmt_7th c 

答えて

0

代わりのtc6671 + tf6671、ヌルを処理するためにCOALESCEを使用しています。 coalesce(tc6671,0)+coalesce(tf6671,0)+...

同様

だからあなたの更新ステートメントは

UPDATE c 
    SET c.total = coalesce(c.tc6671,0) + coalesce(c.tf6671,0) + coalesce(c.pc6671,0) 
    + coalesce(c.pf6671,0) + coalesce(c.tc8572,0) + coalesce(c.tf8572,0) 
    + coalesce(c.pc8572,0) + coalesce(c.pf8572,0) + coalesce(c.tc6672,0) 
    + coalesce(c.tf6672,0) + coalesce(c.tc6673,0) + coalesce(c.tf6673,0) 
    + coalesce(c.pc6673,0) + coalesce(c.pf6673,0) + coalesce(c.pc6674,0) 
    + coalesce(c.pf6674,0) + coalesce(c.tc5852,0) + coalesce(c.tf5852,0) 
    + coalesce(c.tc5853,0) + coalesce(c.tf5853,0) 
FROM cmt_7th c 

ようになります。しかし、あなたがselect sum(coalesce(c.tc6671,0) ...を使用している場合、あなたはすべての列の合計値の合計でわずか1行と列を取得します。 ここをクリックしてください。

http://rextester.com/LUIPOW59089

関連する問題