0

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

4

2 回答 2

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;
于 2013-07-25T18:39:31.150 回答
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子句。

于 2013-07-25T18:40:16.163 回答