在SQL查询中使用PL/SQL表

在SQL查询中使用PL/SQL表,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个简单的select查询,如下所示,它只有两列: 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中创建

我有一个简单的select查询,如下所示,它只有两列:

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表和
内部连接创建这个映射数据。但我意识到PL/SQL表不能用于SQL查询


我正在使用Oracle 11g。

您可以在查询中动态生成列
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;

您可以在查询中动态生成列
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;

您可以使用
CASE
语句来测试该值。下面查询中的extra
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
子句。

可以使用
CASE
语句来测试值。下面查询中的extra
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
子句。

什么是“PL/SQL表”?
PL/SQL表不能用于SQL查询
是的,它们可以。您只需要具有全局类型创建权限什么是“PL/SQL表”?
PL/SQL表不能用于SQL查询
yes它们可以。您只需要拥有全局类型创建权限