ROAD
テーブルがあります。
+----+------------+
| ID | ROAD_CLASS |
+----+------------+
| 1 | ARTERIAL A |
| 2 | ARTERIAL B |
| 3 | ARTERIAL B |
| 4 | ARTERIAL C |
| 5 | ARTERIAL C |
| 6 | ARTERIAL C |
| 7 | COLLECTOR |
| 8 | COLLECTOR |
| 9 | LOCAL |
| 10 | LOCAL |
+----+------------+
ROAD_CLASS
フィールドのデータ型はNVARCHAR2
です。
すべての幹線道路を1つのARTERIAL
カテゴリにグループ化するビューを作成しますが、他の道路クラスはそのままにしておきます。
+------------+
| ROAD_CLASS |
+------------+
| ARTERIAL |
| COLLECTOR |
| LOCAL |
+------------+
これどうやってするの?
私が試したこと:
私はそれの一部を成功させました:
SELECT
(CASE
WHEN ROAD_CLASS = 'ARTERIAL A' THEN 'ARTERIAL'
WHEN ROAD_CLASS = 'ARTERIAL B' THEN 'ARTERIAL'
WHEN ROAD_CLASS = 'ARTERIAL C' THEN 'ARTERIAL'
--ELSE ROAD_CLASS
END) AS ROAD_CLASS_GROUPED
FROM
USER.ROAD
GROUP BY
CASE
WHEN ROAD_CLASS = 'ARTERIAL A' THEN 'ARTERIAL'
WHEN ROAD_CLASS = 'ARTERIAL B' THEN 'ARTERIAL'
WHEN ROAD_CLASS = 'ARTERIAL C' THEN 'ARTERIAL'
END
+--------------------+
| ROAD_CLASS_GROUPED |
+--------------------+
| null |
| ARTERIAL |
+--------------------+
ただし、他の道路クラスをnull
として出力する代わりに、それらのフィールド値(COLLECTOR
およびLOCAL
)を取得します。
CASEステートメントにELSE ROAD_CLASS
を追加しようとすると(SQLコメントに示されているように)、ORA-12704: character set mismatch
エラーが発生します。
どう...
select distinct
(case
when road_class in('ARTERIAL A','ARTERIAL B','ARTERIAL C') then n'ARTERIAL'
else road_class
end ) as ROAD_CLASS_GROUPED
from user.road;
列road_classのデータ型がNVARCHARであるため、エラーメッセージを防ぐために、文字列リテラル 'ARTERIAL'の前にNまたはnを書き込む必要があります。 (参照: https://docs.Oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF00218 )