我有
postgresql表,其值如下:
Table region_data:
region_name | population | region_code
------------+------------+-------------
Region 1 | 120000 | A
Region 2 | 200000 | A
Region 3 | -1 | B
Region 4 | -2 | -1
某些数据可能不可用的地方(即-1和-2值)
包含这些值的翻译的表格:
Table data_codes:
code | meaning
------+-----------------------
-1 | 'Data not available'
-2 | 'Insufficient data'
...
和
Table region_types:
type | meaning
------+---------------
A | Mountain
B | Grassland
...
我想创建一个查询(实际上是一个视图),它返回data_code和region_types表提供的人类可读的翻译.例如,视图将返回:
Region Name | Population | Region Type
------------+--------------------+-------------
Region 1 | 120000 | Mountain
Region 2 | 200000 | Mountain
Region 3 | Data Not Available | Grassland
Region 4 | Insufficient Data | Data Not Available
我尝试过做一些子查询,但是它们返回了很多重复的行,其中代码与data_code表中的任何内容都不匹配.
请帮忙?谢谢!
最佳答案 假设数据代码和区域代码之间没有冲突,那么我看到了两个挑战.一个是填充列上的数据类型问题(值是整数,但数据含义需要字符串).另一种是将区域代码与数据代码组合:
select rd.region_name,
(case when population >= 0 cast(population as varchar(255))
else p.meaning
end) as population,
r.meaning
from region_data rd left outer join
(select type, meaning from region_types
union all
select code, meaning from data_codes
) r
on rd.region_code = r.type left outer join
data_codes p
on rd.population < 0 and rd.population = p.code;