【问题标题】:Oracle SQL - using listagg on a concatenated column from a viewOracle SQL - 在视图的连接列上使用 listagg
【发布时间】:2017-08-09 20:57:40
【问题描述】:

我创建了一个包含串联列的视图。

我成功地在各个列上使用了 listagg,但是当我尝试在 listagg 中使用串联列时,我收到了错误,指出它是无效的标识符。

有没有办法以 listagg 格式组合 requirements 和 message_desc 列?

我的查询如下:

select a.ID,
a.NAME,
a.YEAR,
count (a.linenum) as count_missing_docs,
listagg(a.requirement, ',') within group (order by a.requirement) as "reqs",
listagg(a.MESSAGE_DESC, '...')within group (order by a.MESSAGE_DESC)as "msgs",
listagg(a.combo,' ') within group (order by a.combo) as "all_info"
from
(SELECT
rownum "LINENUM",
FTR.ID,
FTR.NAME,
FTR.YEAR,
FTR.REQUIREMENT,
FTR.STATUS,
FTR.STATUS_IND,
FTR.MESSAGE_DESC,
FTR.REQUIREMENT||'-'||FTR.MESSAGE_DESC||'...' as "combo"
from TRACKING_REQUIREMENT FTR
where FTR.year = '1617'
and FTR.status = 'R'
and FTR.satisfied_ind = 'N'
order by 2 , 1 asc) A
group by
a.ID,
a.NAME,
a.YEAR
order by 1

【问题讨论】:

    标签: sql oracle concatenation listagg


    【解决方案1】:

    问题实际上只是你一直在你的标识符周围加上双引号 - 这告诉 oracle 你想要一个 区分大小写 标识符,但是你在没有双引号的情况下引用它,使用不区分大小写的标识符(Oracle 似乎在内部将其解释为全大写)。

    只要去掉所有的双引号,你的查询就可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多