首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将不同列填充到一个列中的oracle查询

将不同列填充到一个列中的oracle查询
EN

Stack Overflow用户
提问于 2016-06-24 19:27:56
回答 2查看 208关注 0票数 0

什么是甲骨文查询,以填充三种不同的列值,从单行到三不同行,在单列,以及一列生成的动态和结果不应包括空值的列。

表:电信

id --提供者--消费者--接收方

1-伏达丰-t--移动电话- AT&T

预期结果是

id

伏达丰供应商

1--t-移动--消费者

1- AT&T -美国电话电报公司

EN

回答 2

Stack Overflow用户

发布于 2016-06-24 19:31:01

一个简单的使用union all的方法

代码语言:javascript
运行
复制
select id, provider as name, 'provider' from telecom union all
select id, consumer, 'consumer' from telecom union all
select id, receiver, 'receiver' from telecom ;

这将扫描三次telecom。一种更有效的方法可能是:

代码语言:javascript
运行
复制
select t.id,
       (case which when 'provider' then provider
                   when 'consumer' then consumer
                   when 'receiver' then receiver
        end) as name,
       which                  
from telecom t cross join
     (select 'provider' as which from dual union all
      select 'consumer' as which from dual union all
      select 'receiver' as which from dual
     ) x
票数 0
EN

Stack Overflow用户

发布于 2016-06-24 19:53:17

Oracle安装

代码语言:javascript
运行
复制
SET DEFINE OFF;

CREATE TABLE Telecom ( id, provider, consumer, receiver ) AS
SELECT 1, 'vodaphone', 't-mobile', 'AT&T' FROM DUAL;

查询

代码语言:javascript
运行
复制
SELECT id,
       name,
       "type"
FROM   telecom
UNPIVOT( name FOR "type" IN ( provider, consumer, receiver ) );

输出

代码语言:javascript
运行
复制
       ID NAME      type   
---------- --------- --------
         1 vodaphone PROVIDER 
         1 t-mobile  CONSUMER 
         1 AT&T      RECEIVER 

更新

代码语言:javascript
运行
复制
SET DEFINE OFF;

CREATE TABLE Telecom ( id, col_provider, col_consumer, col_receiver ) AS
SELECT 1, 'vodaphone', 't-mobile', 'AT&T' FROM DUAL UNION ALL
SELECT 1, 't-mobile',  NULL, 'EE' FROM DUAL;

查询

代码语言:javascript
运行
复制
SELECT id,
       name,
       "type"
FROM   telecom
UNPIVOT( name FOR "type" IN ( col_provider AS 'provider',
                              col_consumer AS 'consumer',
                              col_receiver AS 'receiver' ) );

输出

代码语言:javascript
运行
复制
        ID NAME      type   
---------- --------- --------
         1 vodaphone provider 
         1 t-mobile  consumer 
         1 AT&T      receiver 
         1 t-mobile  provider 
         1 EE        receiver 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38020763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档