将三个布尔列合并为一个枚举列

时间:2013-03-19 22:06:03

标签: sql oracle

我正在使用包含3个布尔列的表从DB迁移数据,这些列在概念上是互斥的。例如:

| TypeA | TypeB | TypeC |
| 0     | 1     | 0     |
| 0     | 0     | 1     |
| 0     | 1     | 0     |
| 1     | 0     | 0     |
| 1     | 0     | 0     |

我需要根据3个布尔列中的哪一个设置为true,将这三个布尔值合并为一个列。我之后的结果看起来像是:

| Type |
| B    |
| C    |
| B    |
| A    |
| A    |

到目前为止,我已经提出了以下内容,但感觉有些混乱。还有更好的方法吗?

SELECT
CASE WHEN TypeA= 1
   THEN 'A'
   ELSE
      CASE WHEN TypeB= 1
           THEN 'B'
           ELSE
              CASE WHEN TypeC= 1
                   THEN 'C'
              END
      END
END as Type
FROM TABLE

2 个答案:

答案 0 :(得分:8)

您可以将条件语句堆叠在CASE语句中,如此

CASE
WHEN TypeA = 1 THEN 'A'
WHEN TypeB = 1 THEN 'B'
WHEN TypeC = 1 THEN 'C'
END as Type

答案 1 :(得分:2)

chr(65 + TypeB + 2*TypeC) as Type

另一种解决方案:

decode(TypeB-TypeC, 0, 'A', 1, 'B', 'C') as Type