我有这样一张桌子:
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呼叫中的唯一性过滤名称?
我正在尝试使用逗号分隔值列表创建连接.例如:
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) 我正在尝试使用以下查询以列表形式检索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) 这是我的代码:
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()。如果有两个来源和一个过滤器,则给出重复的过滤器,反之亦然。我可以添加什么以仅具有确切数目的源和过滤器?
(使用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) …