根据另一列的值创建新列

时间:2016-04-29 22:33:47

标签: sql sql-server

我是SQL的新手,我大多数时候都使用R.但是要求是我在SQL中实现这一点 我在MS SQL中有一个表,其中每一行都是一个'活动类型'它的值为' A'' B'或者' C'。我总共有40列,如果数据正确,我需要检查每一行。下面的一个小例子有几列。

规则是,如果活动类型是' A'那么MonitorA_的所有列都应该有一个值,其他一切都应该是NULL。如果活动类型是' B'那么所有的MonitorB_列都应该有一个值,其余的都应该是NULL

在下面的示例中,第1行和第2行都可以。但第3行和第4行有问题。这是在第3行,活动类型是' B'但是“MonitorC_ID'”列中有一个值。
我希望能够创建一个值为True或False的新列,具体取决于它是否通过了测试。

| Activity Type | MonitorA_ID | MonitorA_Date | MonitorA_Region | MonitorB_ID | MonitorB_Date | MonitorB_Region | MonitorC_ID | MonitorC_Date | MonitorC_Region |
|---------------|-------------|---------------|-----------------|-------------|---------------|-----------------|-------------|---------------|-----------------|
| B             | NULL        | NULL          | NULL            | 1           | 21/10/1985    | Brisbane        | NULL        | NULL          | NULL            |
| A             | 45          | 25/03/1986    | Gold Coast      | NULL        | NULL          | NULL            | NULL        | NULL          | NULL            |
| B             | NULL        | NULL          | NULL            | 67          | 13/03/1959    | Dubai           | 45          | NULL          | NULL            |
| C             | NULL        | 13/08/1964    | NULL            | NULL        | NULL          | NULL            | 82          | 13/08/1964    | Dubai           |

1 个答案:

答案 0 :(得分:2)

您可以为A,B或C列的每种类型创建一个检查变量。这将为您提供3个新字段A_Chk,B_Chk和C_Chk。如果它们是0,那么行就可以了,但如果它们是1那么该行就是坏的。

要获得一个字段,您只需检查3个chk字段的SUM是否为零。

Select
    CASE
        WHEN [Activity Type] = 'A' THEN
            CASE WHEN MonitorA_ID is NULL
              OR MonitorA_Date is NULL
              OR MonitorA_Region is NULL
            THEN 1 ELSE 0 END
    END as 'A_Chk'

From Table