2017-07-25 60 views
0

Sql的新功能。表加入後的SQL更新表屬性

我有兩個表。 客戶端:

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 

,我得到這樣的結果:

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

但是,如果客戶餘額大於等於0,我想將'status'中的值更新爲'ON';如果<爲0,則將'OFF'更新爲0。是否可以更新'客戶'表?

+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

如果我只在查詢時需要'狀態',它是否需要是原始'客戶'表中的一個屬性?即上述查詢是否會創建「狀態」,即使它不存在於「客戶」表中? (例如當SUM(t.Amount)<0 THEN'OFF'ELSE'ON'END)爲狀態' – wazzahenry

+0

@wazzahenry。 。 。查詢計算結果集中名爲'status'的列。這個計算與任何一個輸入表中名爲'status'的列無關。 –