首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ListAgg的Oracle跨多个列使用不同的值

使用ListAgg的Oracle跨多个列使用不同的值
EN

Stack Overflow用户
提问于 2016-07-01 15:56:47
回答 3查看 4.4K关注 0票数 0

对于甲骨文12c..。我有一张卖给一家公司的系列商品表。这个表有一个3层层次的代表谁卖给这个公司。其中一列是公司名称。我需要帮助编写SQL以生成一个逗号分隔的、唯一的人名列表,包括所有三列,以及销售给该公司的所有行。举个例子。

代码语言:javascript
复制
CompanyName  Rep      Manager     GVP
-----------  -------  --------   --------
Sears        Bob      Tim        Frank
Sears        Jack     Tim        Frank
Ace          Scott    Chris      Bill

当我看西尔斯时,SQL应该返回'Bob,Jack,Tim,Frank‘。名称的顺序并不重要,只是它们是唯一的,并且包括来自所有三个字段的名称。我假设这是一种ListAgg查询,但可能是错误的.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-01 16:12:31

使用UNPIVOT操作符(它只进行一次表扫描,而使用UNION通常会对联合语句中的每个SELECT执行一次表扫描):

Oracle安装

代码语言:javascript
复制
CREATE TABLE table_name ( CompanyName, Rep, Manager, GVP ) AS
SELECT 'Sears', 'Bob',   'Tim',   'Frank' FROM DUAL UNION ALL
SELECT 'Sears', 'Jack',  'Tim',   'Frank' FROM DUAL UNION ALL
SELECT 'Ace',   'Scott', 'Chris', 'Bill'  FROM DUAL;

查询

代码语言:javascript
复制
SELECT CompanyName,
       LISTAGG( Name, ',' ) WITHIN GROUP ( ORDER BY Name ) AS Names
FROM   (
  SELECT DISTINCT
         CompanyName,
         Name
  FROM   table_name
  UNPIVOT( name FOR typ IN ( Rep, Manager, GVP ) )
)
GROUP BY CompanyName;

输出

代码语言:javascript
复制
COMPANYNAME NAMES
----------- ------------------
Ace         Bill,Chris,Scott
Sears       Bob,Frank,Jack,Tim
票数 2
EN

Stack Overflow用户

发布于 2016-07-01 16:02:14

您需要取消数据的枢轴(以删除重复数据),然后重新聚合数据:

代码语言:javascript
复制
select companyname, listagg(person, ',') within group (order by person) as persons
from ((select companyname, repfrom as person t) union
      (select companyname, manager from t) union
      (select companyname, gvp from t)
     ) t
group by companyname;
票数 2
EN

Stack Overflow用户

发布于 2016-07-01 16:06:17

这个SQL应该能做到这一点:

代码语言:javascript
复制
select listagg(p, ', ') within group (order by p) from (
  select rep p
  from   your_table
  union
  select manager p
  from   your_table
  union
  select gvp p
  from   your_table);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38149592

复制
相关文章

相似问题

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