相关疑难解决方法(0)

如何使用Oracle的LISTAGG功能和独特的过滤器?

我有这样一张桌子:

group_id  name  
--------  ----
1         David
1         John
1         Alan
1         David
2         Julie
2         Charles
Run Code Online (Sandbox Code Playgroud)

我想要以下结果:

group_id  names
--------  -----
1         'Alan, David, John'
2         'Charles, Julie'
Run Code Online (Sandbox Code Playgroud)

我可以使用以下查询:

select group_id, 
       listagg(name, ',') within group (order by name) as names
from demotable
group by group_id 
Run Code Online (Sandbox Code Playgroud)

为了得到这个(非常相似的结果):

group_id  names
--------  -----
1         'Alan, David, David, John'
2         'Charles, Julie'
Run Code Online (Sandbox Code Playgroud)

我有什么想法可以通过LISTAGG呼叫中的唯一性过滤名称?

oracle group-by aggregate-functions oracle11g

48
推荐指数
3
解决办法
21万
查看次数

LISTAGG查询"ORA-00937:不是单组组功能"

我正在尝试使用逗号分隔值列表创建连接.例如:

rule_id | attribute_id
----------------------
1       | a
1       | b
2       | c
2       | d
Run Code Online (Sandbox Code Playgroud)

应该:

rule_id | attribute_id
----------------------
1       | a,b
2       | c,d
Run Code Online (Sandbox Code Playgroud)

我试图这样做LISTAGG.但是,使用下面的代码,我得到了ORA-00937: not a single-group group function.我注意到FOR PATHsql-server 的语法,但它看起来不适用于我们的配置.这是我的查询:

SELECT r.rule_id as RULE_ID, 
LISTAGG(a.ATTRIBUTE_ID, ', ') WITHIN GROUP (ORDER BY a.ATTRIBUTE_ID) "ATTR_IDS"
FROM N_RULE r, N_ATTRIBUTE a 
WHERE r.RULE_ID = a.RULE_ID 
ORDER BY r.AUDIENCE, UPPER(r.NAME);
Run Code Online (Sandbox Code Playgroud)

sql oracle

6
推荐指数
1
解决办法
1万
查看次数

如何在 select 子句中使用多个 LISTAGG() 函数时选择不同的值?

我正在尝试使用以下查询以列表形式检索race_code、chara_code 和reason_code:

SELECT a.pid,
       LISTAGG(a.rc, ',') WITHIN GROUP (ORDER BY a.rc) AS race,
       LISTAGG(a.cc, ',') WITHIN GROUP (ORDER BY a.cc) as chara_codes,
       LISTAGG(a.rrc, ',') WITHIN GROUP (ORDER BY a.rrc) AS removal_reason
FROM (
   SELECT UNIQUE
          p.person_id pid,
          r.race_code rc,
          c.characteristic_code cc,
          rr.removal_reason_code rrc
     FROM person p left outer join race r on p.person_id = r.person_id
          left outer join characteristic c on p.person_id = c.person_id
          left outer join placement_episode pe on p.person_id = pe.child_id
          left outer join removal_reason rr on pe.placement_episode_id …
Run Code Online (Sandbox Code Playgroud)

sql oracle

3
推荐指数
1
解决办法
3624
查看次数

如何从listagg删除重复项

这是我的代码:

SELECT rule,
       DATASET,
       type,
       LISTAGG(source,';') within GROUP (ORDER BY source) AS source,
       TARGET, 
       LISTAGG(filter,';') within GROUP (ORDER BY filter)  AS filter
FROM demo_table;
Run Code Online (Sandbox Code Playgroud)

我的问题是使用的两个listagg()。如果有两个来源和一个过滤器,则给出重复的过滤器,反之亦然。我可以添加什么以仅具有确切数目的源和过滤器?

sql oracle

1
推荐指数
1
解决办法
4073
查看次数

使用wm_concat()获得ORA-22922(不存在的LOB值)或根本没有结果

(使用Oracle 11.2)

我有一个相当复杂的SQL,类似于

wm_concat( distinct abc )
Run Code Online (Sandbox Code Playgroud)

预期会返回一些varchar2(4000)兼容的结果

它导致ORA-00932: inconsistent datatypes在我的选择中使用了一些coalesce( some_varchar_col, wm_concat( ... ) )


因此,我尝试通过两种不同的方法进行转换:

dbms_lob.substr( ..., 4000 )  -- L) tried even with 3000 in case of "unicode byte blow-up"
cast( ... as varchar2(4000))  -- C) tried even with 3000 in case of "unicode byte blow-up"
Run Code Online (Sandbox Code Playgroud)

(在视图中使用,但是尝试使用它表明它与视图无关)

根据列和其他运算符,我要么得到N)没有结果,要么得到O)ORA-22922

select * from view_with_above_included where rownum <= 100
Run Code Online (Sandbox Code Playgroud)
  • N)我的Eclipse Data Explorer JDBC连接返回没有任何结果(没有结果的列,没有结果,没有(0 rows effected),只有查询时间统计信息)。(这可能是内部异常而不是这样处理吗?)

  • O) …

casting oracle11g wm-concat

0
推荐指数
1
解决办法
1万
查看次数