我有這樣的結構:如何在沒有子查詢的情況下聚合一列中的行?
with
pages (id, sid, text) as (
select 1, 1, 'lorem ipsum' from dual union all
select 2, 1, 'lorem ipsum2' from dual union all
select 3, 1, 'lorem ipsum3' from dual union all
select 4, 1, 'lorem ipsum4' from dual),
responsible (id, pid, name, sirname) as (
select 1, 1, 'Alexey', 'Ivanov' from dual union all
select 2, 1, 'Igor', 'Petrov' from dual union all
select 3, 1, 'Dmitriy', 'Shestakov' from dual)
和這樣的選擇:
select
p.id, p.sid,
CASE
WHEN 1=1 THEN p.text
ELSE p.text
END AS "Important thing",
(select listagg (name || '-' || sirname, '; ') within group (order by id) from responsible where pid = p.sid) as "SA"
from
pages p
order by
p.id;
輸出:
--------------------------
ID SID Important thing SA
1 1 lorem ipsum Alexey-Ivanov; Igor-Petrov; Dmitriy-Shestakov
2 1 lorem ipsum2 Alexey-Ivanov; Igor-Petrov; Dmitriy-Shestakov
3 1 lorem ipsum3 Alexey-Ivanov; Igor-Petrov; Dmitriy-Shestakov
4 1 lorem ipsum4 Alexey-Ivanov; Igor-Petrov; Dmitriy-Shestakov
它的工作,因爲我想要的。它添加到每個pages.id所有負責人。名字+ sirname的。 但我不喜歡我使用嵌套查詢,因爲在真實的數據庫中有超過9000頁的頁面。所以我很害怕這個SQL查詢將不會那麼快,數據庫管理員將懲罰我:)
我知道,我可以使用JOIN,但我不知道如何爲每個頁面聚合所有名稱+ sirname。 SID。我想,我可以使用listagg,但正如我所知,Oracle不能'別名'(「重要的事情」)。
所以,我需要你的建議。對於我來說,讓這個查詢更快一點並不重要,我想知道如何以另一種方式解決這個任務。
你應該包括你想要或已經輸出。 –
Oracle擁有智能優化器。不要擔心使用子查詢或CTE。 –
@TimBiegeleisen完成, – newSqlz