Oracle11g 具有多个子查询的Oracle 11g Listag函数
我正在开发Oracle11g,我正在尝试编写一个查询,该查询将为两个日期之间所有缺失的月份插入“?”。这是我能够做到的。 但是,现在我想在单个记录中整理特定列的所有记录。我已经使用了Listag函数来实现这一点,但是我在Listag函数中得到了一个错误无效标识符。 这是我的密码:- 选择facilitynumber, LISTAGGfacilitystatus,按空配置文件分组订单内 从…起 以所有月份为准 从dual中选择to_datelevel“MM”作为所有项 在“01”和“05”之间按级别连接 ,月份为 从中选择* 选择ccds.facilitynumber、ccds.facilitystatus、dsub.filecreationdate作为facilitystatus日期、dsub.submissiondate, 按ccds.facilitynumber分区上的行号,从dsub.submissiondate提取月份按dsub.submissiondate描述顺序 从CCDSSubmission ccds内部联接数据Submission dsub 在ccds.datasubmissionid=dsub.datasubmissionid上 内部联接数据供应商dsup 在dsub.datasupplierid=dsup.datasupplierid上,其中ccds.matchedcompanynumber='TEST9239' 按dsub订购。提交日期说明 其中r=1 选择全部、大小写 当facilitystatus为空时 然后呢 其他设施状态 以facilitystatus结束,提交日期,facilitynumber 从所有剩余月份开始外接月份 从allmonths开始的提取月份。allmnths=从月份开始的提取月份。allmnths提交日期订单 按设备编号分组 我在第二行遇到了错误。我的子查询(即以开始的查询)返回的结果如下:-Oracle11g 具有多个子查询的Oracle 11g Listag函数,oracle11g,aggregate-functions,listagg,Oracle11g,Aggregate Functions,Listagg,我正在开发Oracle11g,我正在尝试编写一个查询,该查询将为两个日期之间所有缺失的月份插入“?”。这是我能够做到的。 但是,现在我想在单个记录中整理特定列的所有记录。我已经使用了Listag函数来实现这一点,但是我在Listag函数中得到了一个错误无效标识符。 这是我的密码:- 选择facilitynumber, LISTAGGfacilitystatus,按空配置文件分组订单内 从…起 以所有月份为准 从dual中选择to_datelevel“MM”作为所有项 在“01”和“05”之间按级
ALLMNTHS| facilitystatus | submissiondate | facilitynumber
--------- | --------------- | --------------- | ---------------
01-JAN-16 | U | 23-JAN-16 | FAC01
01-FEB-16 | ? | null | null
01-MAR-16 | 1 |05-MAR-16 | FAC01
现在使用LISTAGGfacilitystatus,我希望结果为->
Profile| facilitynumber
U?1 | FAC01
但是,Oracle无法识别facilitystatus列,因此我无法实现预期的结果
任何帮助都将不胜感激
谢谢至少在Oracle中,这是一种非常糟糕的做法,您为此付出了代价 当您用双引号(如facilitystatus)声明列名时,它会以小写形式完全记录在目录中。当您在外部查询中引用它而不使用双引号时,名称会自动转换为大写。Oracle就是这样做的,我不知道其他DB产品。因此,当然存在不匹配 子查询中绝对不需要双引号。移除它们,看看会发生什么。要么查询可以工作,要么您将得到一个不同的、不相关的错误。祝你好运 永远不要使用双引号的名字。它们的使用有以下原因,其中任何一个都不能更好地从一开始就避免这种情况: 使用特定的大小写而不是不区分大小写-默认情况下,名称以所有大写字母输入目录中,并且在代码中可以使用任何大小写 在名称中嵌入空格 使用保留字和关键字(如日期和列)作为列或表名
至少在甲骨文中,这是一种非常糟糕的做法,你为此付出了代价 当您用双引号(如facilitystatus)声明列名时,它会以小写形式完全记录在目录中。当您在外部查询中引用它而不使用双引号时,名称会自动转换为大写。Oracle就是这样做的,我不知道其他DB产品。因此,当然存在不匹配 子查询中绝对不需要双引号。移除它们,看看会发生什么。要么查询可以工作,要么您将得到一个不同的、不相关的错误。祝你好运 永远不要使用双引号的名字。它们的使用有以下原因,其中任何一个都不能更好地从一开始就避免这种情况: 使用特定的大小写而不是不区分大小写-默认情况下,名称以所有大写字母输入目录中,并且在代码中可以使用任何大小写 在名称中嵌入空格 使用保留字和关键字(如日期和列)作为列或表名
在外部查询中,您有GROUP BY facilitynumber,这就是您出现此错误的原因。删除分组依据并获取上个月的行,它可能有效。否。同样的错误。在外部查询中,您有GROUP BY facilitynumber,这就是您出现此错误的原因。删除分组依据并获取上个月的行,它可能有效。否。同样的错误,太棒了!我不知道报价的问题。删除那些引用对我来说很有效:太棒了!我不知道报价的问题。删除这些引用对我来说很有效: