根据另一列的值更新一列

4sh*_*g85 4 sql sql-server sql-server-2012

我有一个名为Vendor的表,在这个表中我有一个名为AccountTerms的列,它只显示一个值(即0,1,2,3),依此类推.我还有一个我想要使用的列(ulARAgeing)以反映该值的含义,例如:

0: Current
1: 30 Days
2: 60 Days
Run Code Online (Sandbox Code Playgroud)

等等...

我需要的是一个脚本,它将查看AccountTerms中的值,然后将更新ulARAgeing以显示上面显示的单词值.我该怎么做呢?

Fut*_*Fan 15

我将尽可能以简单的方式解释这一点,因此很容易理解:

我们假设你有一个Vendor像这样的表设置:

create table Vendor (AccountTerms int, ulARAgeing varchar(50));
Run Code Online (Sandbox Code Playgroud)

然后,我们将在Vendor表中为这两列插入一些示例值:

insert into Vendor values
(0,'Test'),
(1,'Test1'),
(2,'Test2');
Run Code Online (Sandbox Code Playgroud)

接下来,我们将编写一个更新语句,以ulARAgeing根据AccountTerms同一表中列的值更新列:

update vendor 
set ulARAgeing = (CASE 
                      WHEN AccountTerms = 0 
                        THEN 'Current'
                      WHEN AccountTerms = 1
                        THEN '30 Days'
                      WHEN AccountTerms = 2
                        THEN '60 Days'
                    END);
Run Code Online (Sandbox Code Playgroud)

CASE WHEN类似于IF..ELSE大多数其他编程语言中的using 语句.因此,这里我们将ulARAgeing根据case语句中的条件将现有值更新为不同的字符串值.所以,例如,如果AccountTerms = 0那么我们将把值更新为ulARAgeing"当前"等等.

要检查上述语句是否正常工作,您只需要运行上面的更新语句,然后再次从表中选择:

 select * from Vendor; 
Run Code Online (Sandbox Code Playgroud)

结果:

+--------------+-----------------+
| AccountTerms |   ulARAgeing    |
+--------------+-----------------+
|            0 |         Current |
|            1 |         30 Days |
|            2 |         60 Days |
+--------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle Demo

  • 如果表中有超过3条记录呢?他得为此写很多案子? (2认同)