【发布时间】:2015-06-25 19:57:13
【问题描述】:
一张表(Table1)有以下数据:
+-----------+------------+-----------+---------+ |帐号 |老支行 |新支行 |余额 | +-----------+------------+-----------+---------+ | 785321 | 10 | 20 | -200 | | 785322 | 10 | 20 | 300 | +-----------+------------+-----------+---------+使用逻辑:
如果余额为负数(即
如果余额为正(即>0),则必须借记旧分行(Dr),贷记新分行(Cr);
下面的行必须插入另一个表(表2)
使用光标或其他方式的可能解决方案是什么?
谢谢,
【问题讨论】:
-
当然不是游标。你只需要两个更新语句。
-
该问题表明您是一名从事 SQL 工作的软件开发人员。在考虑 SQL 时,您必须忘记存在循环/迭代(它们派上用场,但仅在极少数情况下),但要考虑数据组和数据集,以及如何将它们链接在一起。正如 Sean 指出的那样,您需要两个更新语句(可能在事务中),方法是为每个语句选择所需的数据(一个用于 oldbranch,一个用于 newbranch)。
-
是的,您的思维定式被困在程序世界中。与其考虑更改行,不如将想法转移到要对列执行的操作上。
-
我认为下面的所有答案都忽略了需要从两行“创建”四行的事实。如果数据不存在,这不是更新语句,它是
CROSS JOIN(或INNER JOIN)来生成行,INSERT来将它们放入表中。也许OP可以在我提出答案之前确认。
标签: sql-server iteration