我是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 |
答案 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