Sql 2 Listagg相同的查询和重复值
如果1个科目有2本书,则该科目重复2次。我知道这个问题重复了一遍,但写得不对。 请帮帮我。谢谢18c和更早的Oracle 一种方法是使用row_number做您想要做的事情。您的查询相当复杂,但这里有一个想法:Sql 2 Listagg相同的查询和重复值,sql,oracle,oracle11g,listagg,Sql,Oracle,Oracle11g,Listagg,如果1个科目有2本书,则该科目重复2次。我知道这个问题重复了一遍,但写得不对。 请帮帮我。谢谢18c和更早的Oracle 一种方法是使用row_number做您想要做的事情。您的查询相当复杂,但这里有一个想法: SELECT DISTINCT ROW_NUMBER () OVER (ORDER BY A.f_NAME ASC) AS r, A.ID, A.F_NAME, A.L_NAME, A.FATH
SELECT DISTINCT
ROW_NUMBER () OVER (ORDER BY A.f_NAME ASC) AS r,
A.ID,
A.F_NAME,
A.L_NAME,
A.FATHER_NAME,
A.DOB,
A.DEAD_DATE,
A.GENDER,
A.NATIONALITY,
A.AUTHOR_INFO,
A.REWARD,
LISTAGG (TO_CHAR (S.SUBJECT_NAME), ', ')
WITHIN GROUP (ORDER BY TO_CHAR (S.SUBJECT_NAME))
AS SUBJECT_NAME,
LISTAGG (TO_CHAR (B.TITLE), ', ')
WITHIN GROUP (ORDER BY TO_CHAR (b.title))
AS book
FROM book_author ba
RIGHT JOIN author a
ON A.ID = BA.AUTHOR_ID
LEFT JOIN book b
ON B.ID = BA.BOOK_ID
LEFT JOIN author_subject ass
ON a.ID = ass.author_id
LEFT JOIN subjects s
ON s.id = ass.subject_id
WHERE A.ACTIVE = 1
GROUP BY A.ID,
A.F_NAME,
A.L_NAME,
A.FATHER_NAME,
A.DOB,
A.DEAD_DATE,
A.GENDER,
A.NATIONALITY,
A.AUTHOR_INFO,
A.REWARD;
我不知道您为什么要将subject_名称转换为字符串。我不明白为什么需要这样做,所以我删除了这个逻辑。也许您可以简化问题中的查询,以便更简单地回答。你的问题比回答这个问题所需要的要复杂得多。
with x as (
<whatever>
)
select <grouping columns>, -- grouping columns
list_agg(case when seqnum_subject_name = 1 then subject_name end, ', ') within group (order by subject_name),
list_agg(case when seqnum_title = 1 then title end, ', ') within group (order by title)
from (select x.*,
row_number() over (partition by <grouping columns>, subject_name order by subject_name) as seqnum_subject_name,
row_number() over (partition by <grouping columns>, title order by title) as seqnum_title
from x
) x
group by <grouping columns>;