我正在运行查询,我不想在GROUP BY子句中包含GL列,因为我不想为GL字段的每个变体显示不同的行。但我需要在后续处理中评估该字段,将其与动态生成的GL编号列表进行比较。我能想到的最好方法是使用函数,我尝试使用ListAgg()。首先,是否有更好的功能可用于将每行的GL与列表进行比较?此外,我可以使用SQL Developer获得下面的结果,但是当我尝试在Oracle返回ORA-01002错误的网页上输出结果时。我们在两种情况下都使用12c。下面是查询和输出。如果没有ListAgg(),我必须在SELECT和GROUP BY中包含GL列,并且它不合需要地为每个GL输出一个单独的行。
SELECT h.h_spa_id as spa_id,
h.submit_dt,
h.oa_ap_date,
ListAgg(gl,',') within group (order by gl) "mygl"
WHERE h.next_apprv= 'approverID'
and h.table1_id = d.table2_id
and h.table1_id = table3_id
group by h.h_spa_id,h.submit_dt,h.oa_ap_date
order by h.h_spa_id
H_SPA_ID SUBMIT_DT OA_AP_DATE MYGL
1627005 1/25/2008 10:11:53 AM 1/25/2008 11:15:56 AM 52287,52287,52287,52287,52287,52287,52287,52287,52287,52287,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385
答案 0 :(得分:0)
您可以使用CAST
和COLLECT
将其分组到一个集合中:
SELECT h.h_spa_id as spa_id,
h.submit_dt,
h.oa_ap_date,
CAST( COLLECT( DISTINCT gl ) AS SYS.ODCINUMBERLIST ) AS mygl
FROM h
INNER JOIN
d
ON ( h.table1_id = d.table2_id )
WHERE h.next_apprv = 'approverID'
AND h.table1_id = table3_id
GROUP BY h.h_spa_id,
h.submit_dt,
h.oa_ap_date
ORDER BY h.h_spa_id
然后,当您将其用于后续处理时,值将在数组中。