根据另一列的值更新一列

7

我有一个名为Vendor的表格,在这个表格中我有一个叫做AccountTerms的列,它只显示一个值(例如0、1、2、3等等)。我还有一列(ulARAgeing)需要使用,以反映该值的含义,例如:

0: Current
1: 30 Days
2: 60 Days

我需要的是一个脚本,它将查看AccountTerms中的值,然后更新ulARAgeing以显示上面显示的单词值。如何做到这一点?

只是为了明确。AccountTerms 和 ulARAgeing 属于同一张表吗?您能描述一下您的表结构吗? - Andrew Paes
更新ulARAgeing,数值在哪里?在另一个表格吗?这将通过表单一次性更新完成吗? - Andrew Paes
2个回答

21

我会尽可能以简单的方式来解释这个问题,让大家更容易理解:

假设你有一个名为Vendor的表格,设置如下:

create table Vendor (AccountTerms int, ulARAgeing varchar(50));

接下来,我们会在Vendor表的两列中插入一些示例值:

insert into Vendor values
(0,'Test'),
(1,'Test1'),
(2,'Test2');

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

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

CASE WHEN 类似于大多数其他编程语言中使用 IF..ELSE 语句。因此,在这里,我们将根据 case when 语句中的条件将现有的 ulARAgeing 值更新为不同的字符串值。例如,如果 AccountTerms = 0,则我们将更新 ulARAgeing 的值为“Current”,依此类推。

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

 select * from Vendor; 

结果:

+--------------+-----------------+
| AccountTerms |   ulARAgeing    |
+--------------+-----------------+
|            0 |         Current |
|            1 |         30 Days |
|            2 |         60 Days |
+--------------+-----------------+

SQL Fiddle演示


2
如果表中有超过3条记录呢?他需要为此编写很多情况吗? - Andrew Paes
1
"(即0、1、2、3)等等"..."例如:等等..." - Andrew Paes
1
@AndrewPaes 抱歉,这没有任何意义。据我理解,他的意思是在“AccountTerms”列中有像0、1、2、3等值,可能我没有正确理解。 - FutbolFan
1
嗨,大家好,这个对我来说是最好的(主要因为我能理解它),而且它确实做到了我需要它做的一切... - 4shg85
1
嗨,安德鲁,真的很抱歉没有解释得很清楚,今天过得很糟糕。下次会记住的:)谢谢你们所有人的帮助!非常感激! - 4shg85
显示剩余3条评论

4
假设你想要一个简单的脚本来更新,那么它应该是这样的:
update 
Vendor 
set ulARAgeing = 'Current' 
where AccountTerms = 0;

假设您需要一个脚本,它可以根据数字递增的逻辑自动更新列。那么它应该是这样的:
;WITH CTE
     AS (select
            AccountTerms
            ,ulARAgeing
            ,CONCAT((AccountTerms * 30), ' Days') as _ulARAgeing
          from
            Vendor)
UPDATE CTE
SET    ulARAgeing = _ulARAgeing;

如果“ulARAgeing”的值来自另一个表格,则在使用“; WITH”脚本时,您必须使用联接来获取正确的值,而不是使用递进逻辑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接