创建一个新列并根据另一个列值分配值

时间:2015-09-25 06:56:44

标签: sql-server view

考虑一个简单的观点,如:

JOB    TYPE    DAYS
 1      A       10
 2      B       2
 3      A       6
 4      C       8

我想添加一个新列(原始表中不存在),称为ADP。此列将根据TYPE列填充值。如果该值为A,那么ADP列将填充CMM值,如果其B带有CM,并且它的C带有PMM值。

结果就是这样:

 JOB    TYPE    DAYS    ADP
  1      A       10     CMM 
  2      B       2      CM
  3      A       6      CMM
  4      C       8      PMM

2 个答案:

答案 0 :(得分:1)

您可以使用CASE

SELECT
  JOB,
  TYPE,
  DAYS,  
  ADP = CASE [TYPE]
         WHEN 'A' THEN 'CMM'
         WHEN 'B' THEN 'CM'
         WHEN 'C' THEN 'PMM'
         ELSE NULL
        END
FROM your_table;

或者您可以创建查找表:

<强> SqlFiddleDemo1&2

CREATE TABLE lookup([Type] NVARCHAR(1), Val NVARCHAR(10), UNIQUE([Type]));

INSERT INTO lookup([Type], [Val])
VALUES ('A' , 'CMM'), ( 'B' ,'CM'),( 'C', 'PMM');

SELECT
  JOB,
  t.[TYPE],
  DAYS,  
  ADP = l.[val]
FROM your_table t
LEFT JOIN lookup l
  ON t.[type] = l.[type];

如果您需要在系统的许多位置使用此类型值,则此解决方案可能很有用。

答案 1 :(得分:1)

使用CASE表达式。

select JOB,TYPE,DAYS,
case when TYPE = 'A' then 'CMM'
     when TYPE = 'B' then 'CM'
     when TYPE = 'C' then 'PMM'
     else null 
end as ADP
from tablename;

SQL Fiddle