我正在使用包含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
答案 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