2

概念的には相互に排他的な3つのブール列を含むテーブルを持つDBからデータを移行しています。例えば:

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

3つのブール列のどれがtrueに設定されているかに基づいて、これらの3つのブール値を1つの列にマージする必要があります。私が求めている結果は次のようになります。

| 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 に答える