首页 > 解决方案 > 根据 char 类型所说的内容将 char 类型转换/转换为 int

问题描述

我正在查询需要将种族分类为以下五种之一的人口统计数据:美洲印第安人、亚洲人、黑人、白人、太平洋 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 来制作数字,但遇到了困难。任何帮助,将不胜感激。

标签: sqltsql

解决方案


Ys 的数量相加可能会很棘手。这是一种方法:

(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

推荐阅读