我正在查询人口统计数据,我需要将种族分为五种:美国印第安人、亚洲人、黑人、白人、太平洋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我确信有很多方法可以做到这一点,我曾尝试使用Convert/Cast对它们进行数值化,但遇到了困难。任何帮助都将不胜感激。
发布于 2019-04-23 01:10:51
将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发布于 2019-04-23 01:11:02
如果在第一个测试中使用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 Racehttps://stackoverflow.com/questions/55797350
复制相似问题