根据字符类型的说法将字符类型强制转换/转换为整数

时间:2019-04-22 16:07:21

标签: sql tsql

我正在查询人口统计资料,我需要将种族归为以下五种之一:美洲印第安人,亚洲人,黑人,白人,太平洋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

我敢肯定有很多方法可以做到这一点,我试图对它们使用“转换/转换”来制作数字,但是遇到了困难。任何帮助将不胜感激。

2 个答案:

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