我有一个简单的选择查询,如下所示只有2列:
SELECT a, b FROM table;
我有一些地图数据,如下所示:
if a=1 and b=1 then c=100
if a=1 and b=2 then c=200
if a=2 and b=1 then c=300
and so on.
现在,我需要创建一个查询,以便输出如下:
1,1,100
1,2,200
2,1,300
and so on
这里我不想创建表并存储映射数据。我可以在PL / SQL中创建任何数据结构来存储它。
我怎样才能做到这一点?
PS:我尝试使用PL / SQL表并使用INNER JOIN
创建此映射数据。但我意识到PL / SQL表不能用于SQL查询。
我正在使用Oracle 11g。
答案 0 :(得分:2)
您可以在查询中即时生成列c
输出
SELECT a, b,
case when a=1 and b=1 then 100
a=1 and b=2 then 200
a=2 and b=1 then 300
end as c
FROM table;
答案 1 :(得分:1)
您可以使用CASE
语句来测试该值。以下查询中额外WHERE
子句的目的是加快查询速度,因为它只会测试过滤条件中存在的值。
SELECT a, b,
CASE WHEN a = 1 AND b = 1 THEN 100
WHEN a = 1 AND b = 2 THEN 200
WHEN a = 2 AND b = 1 THEN 300
END c
FROM tableName
WHERE a IN (1,2) AND
b IN (1,2)
但是,如果要在所有记录中运行,只需删除WHERE
子句。