Wil*_*son 5 oracle case group-by oracle-12c
我有一张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 |
+----+------------+
Run Code Online (Sandbox Code Playgroud)
该ROAD_CLASS
字段的数据类型是NVARCHAR2
.
我想创建一个视图,将所有主干道路分组到一个ARTERIAL
类别中,但将其他道路类保留原样:
+------------+
| ROAD_CLASS |
+------------+
| ARTERIAL |
| COLLECTOR |
| LOCAL |
+------------+
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我试过的:
我已经成功完成了其中的一部分:
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 |
+--------------------+
Run Code Online (Sandbox Code Playgroud)
但是,null
我想获取它们的字段值(COLLECTOR
和LOCAL
),而不是将其他道路类输出为。
当我尝试添加ELSE ROAD_CLASS
到 CASE 语句时(如 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;
Run Code Online (Sandbox Code Playgroud)
由于road_class列的数据类型是NVARCHAR,因此我们需要在字符串文字“ARTERIAL”前面写入N或n,以防止出现错误消息。(另请参阅: https: //docs.oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF00218)
归档时间: |
|
查看次数: |
1697 次 |
最近记录: |