2

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

| 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
4

2 回答 2

8

您可以像这样在 CASE 语句中堆叠条件

CASE
WHEN TypeA = 1 THEN 'A'
WHEN TypeB = 1 THEN 'B'
WHEN TypeC = 1 THEN 'C'
END as Type
于 2013-03-19T22:11:35.273 回答
2
chr(65 + TypeB + 2*TypeC) as Type

另一种解决方案:

decode(TypeB-TypeC, 0, 'A', 1, 'B', 'C') as Type
于 2013-03-19T23:06:13.883 回答