我正在查询人口统计资料,我需要将种族归为以下五种之一:美洲印第安人,亚洲人,黑人,白人,太平洋ISL。我需要创建一列,如果它们不止一个种族,它将输出“ M”,否则将输出该种族的适当代码。在原始表格中,每个种族均编码为“ Y”或NULL。
IIf((SD.[RACE_AMER_INDIAN]+SD.[RACE_ASIAN]+SD.[RACE_BLACK]+SD.[RACE_PACIFIC_ISL]+SD.[RACE_WHITE])>1,'M',
IIf(SD.[RACE_AMER_INDIAN]='Y','I',
IIf(SD.[RACE_ASIAN]='Y','A',
IIf(SD.[RACE_BLACK]='Y','B',
IIf(SD.[RACE_PACIFIC_ISL]='Y','P',
IIf(SD.[RACE_WHITE]='Y','W','')))))) AS Race
我敢肯定有很多方法可以做到这一点,我试图对它们使用“转换/转换”来制作数字,但是遇到了困难。任何帮助将不胜感激。
答案 0 :(得分:1)
将Y
的数量加起来可能很棘手。这是一种方法:
(case when len(concat(SD.[RACE_AMER_INDIAN], SD.[RACE_ASIAN], SD.[RACE_BLACK], SD.[RACE_PACIFIC_ISL], SD.[RACE_WHITE]) > 1
then 'M'
when SD.[RACE_AMER_INDIAN] = 'Y' then 'I'
when SD.[RACE_ASIAN] = 'Y' then 'A'
when SD.[RACE_BLACK] = 'Y' then 'B'
when SD.[RACE_PACIFIC_ISL] = 'Y' then 'P'
when SD.[RACE_WHITE] = 'Y' then 'W'
else ''
end) as Race
答案 1 :(得分:0)
如果在第一次测试中使用Concat
,它将通过将NULL
值转换为空字符串来处理它们。如果结果的长度大于1
,则您的条件为'M'
。使用searched case
而不是嵌套的IIF
可以使生活更轻松:
case
when Len( Concat( SD.[RACE_AMER_INDIAN], SD.[RACE_ASIAN], SD.[RACE_BLACK], SD.[RACE_PACIFIC_ISL], SD.[RACE_WHITE] ) ) > 1 then 'M'
when SD.[RACE_AMER_INDIAN] = 'Y' then 'I'
when SD.[RACE_ASIAN] = 'Y' then 'A'
when SD.[RACE_BLACK] = 'Y' then 'B'
when SD.[RACE_PACIFIC_ISL] = 'Y' then 'P'
when SD.[RACE_WHITE] = 'Y' then 'W'
else '?' end as Race