根据另一列

时间:2015-08-19 17:51:54

标签: sql sql-server sql-server-2012

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

0: Current
1: 30 Days
2: 60 Days

依旧......

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

2 个答案:

答案 0 :(得分:13)

我将尽可能以简单的方式解释这一点,以便于理解:

我们假设您有一个表Vendor设置如下:

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

然后,我们将在Vendor表中插入两个列的一些样本值:

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

接下来,我们将根据同一表格中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);

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

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

 select * from Vendor; 

<强>结果:

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

SQL Fiddle Demo

答案 1 :(得分:0)

假设你想要一个简单的脚本来更新,那就是这样的:

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”的脚本必须使用连接来获取正确的值,而不是使用渐进逻辑。