在oracle查询中选择行值作为列

问题描述 投票:0回答:2

这是表:

select * from ABCD;

|    ABCD_ID | ROLE  | NAME | PARAM   | VALUE |
+============+=======+======+=========+=======+
|    1       | Allow | A1   | Period1 | 1     |
|    1       | Allow | A1   | Period1 | 2     |
|    1       | Allow | A1   | Period1 | 3     |
|    2       | Allow | A2   | Period2 | 11    |
|    2       | Allow | A2   | Period2 | 12    |
|    3       | Allow | A3   | Period3 | 111   |
|    4       | Allow | A4   | XY      | 200   |

我想运行select查询将句点作为列,列的值将为“VALUE”

需要输出:

|    ABCD_ID   | ROLE  | NAME | Period |
+==============+=======+======+========+
|            1 | Allow | A1   | 1      |
|            1 | Allow | A1   | 2      |
|            1 | Allow | A1   | 3      |
|            2 | Allow | A2   | 11     |
|            2 | Allow | A2   | 12     |
|            3 | Allow | A3   | 111    |

查询我尝试过:

select ABCD_ID,role,name,param, 
       (select distinct value 
        from ABCD 
        where ABCD_ID=a.ABCD_ID 
          and param like '%Period%') as "Period" 
from ABCD a 
where role='Allow' 
  and param like '%Period%'

获取此错误:ORA-01427:单行子查询返回多行

sql oracle
2个回答
1
投票

看起来像一个简单的列别名给我:

select ABCD_ID,
       role,
       name,
       value as "Period"
from ABCD a 
where role='Allow' 
  and param like 'Period%'

0
投票

我不认为你需要添加'role ='允许'的条件。

从ABCD a中选择ABCD_ID,角色,名称,值作为“期间”,其中参数如'Period%'

© www.soinside.com 2019 - 2024. All rights reserved.