2017-07-25 10 views
0

新に参加します。SQL更新テーブルの属性は、SQLに

私は2つのテーブルを持っています。 クライアント:

client_id client_name status 
1    JZ  NULL 
2    KD  NULL 
3    TF  NULL 

取引:

transaction_id Amount client_id 
1      5  1   
2      5  2   
3      5  3   

私は次のように参加することが可能です。

SELECT client.status, client.client_id, client.client_name, SUM(transactions.Amount) AS Balance 
FROM client 
JOIN transactions ON transactions.client_id=client.client_id 
GROUP BY client.client_id 
ORDER BY client_id 

をし、私はこの結果を得る:

を< 0は、それが更新されるようにこれを行うことが可能な場合は

しかし、私はクライアントのバランスが> = 0であれば、と「OFF」から「ON」から「状態」に値を更新したいと思います'クライアント'テーブル?

+0

使用しているデータベースとのあなたの質問にタグを付けます。 –

答えて

1

あなたのクエリには、いくつかの構文エラーを持っていますが、あなたの質問への答えは基本的にCASE式である:あなたがテーブルに値を更新したい場合は

SELECT c.client_id, c.client_name, SUM(t.Amount) AS Balance, 
     (CASE WHEN SUM(t.Amount) < 0 THEN 'OFF' ELSE 'ON' END) as status 
FROM client c JOIN 
    transactions t 
    ON t.client_id = c.client_id 
GROUP BY c.client_id 
ORDER BY c.client_id, c.client_name; 

あなたはupdateを必要としています。ほとんどのデータベース上で動作するはずです一つの方法は次のとおりです。

update client 
    set status = (select (case when sum(t.Amount) < 0 then 'OFF' else 'ON' end) 
        from transactions t 
        where t.client_id = client.client_id 
       ); 

しかし、私はこれをやってお勧めしません。次のトランザクションでステータスが無効になる可能性があります。今のところ、必要なときに情報を取得するためにクエリを書く方が良いでしょう。

+0

クエリで 'ステータス'のみが必要な場合は、元の 'クライアント'テーブルの属性である必要がありますか?つまり、 'クライアント'テーブルに存在しない場合でも、上記のクエリで 'ステータス'が作成されますか? '(CASE WHEN SUM(t.Amount)<0 THEN END 'ON' ELSE 'OFF')status' – wazzahenry

+0

@wazzahenryとして。 。 。クエリは 'status'という結果セットの列を計算します。この計算は、どちらの入力テーブルでも 'status'という列とは関係ありません。 –

関連する問題