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
但是,我想更新' 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
);
但是,我不建议这样做。下一个事务可能会使状态无效。目前,最好在需要时编写查询以获取信息。