在SQL查询中使用PL / SQL表

时间:2013-07-25 18:37:51

标签: sql oracle plsql

我有一个简单的选择查询,如下所示只有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。

2 个答案:

答案 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子句。