Oracle11g 具有多个子查询的Oracle 11g Listag函数

Oracle11g 具有多个子查询的Oracle 11g Listag函数,oracle11g,aggregate-functions,listagg,Oracle11g,Aggregate Functions,Listagg,我正在开发Oracle11g,我正在尝试编写一个查询,该查询将为两个日期之间所有缺失的月份插入“?”。这是我能够做到的。 但是,现在我想在单个记录中整理特定列的所有记录。我已经使用了Listag函数来实现这一点,但是我在Listag函数中得到了一个错误无效标识符。 这是我的密码:- 选择facilitynumber, LISTAGGfacilitystatus,按空配置文件分组订单内 从…起 以所有月份为准 从dual中选择to_datelevel“MM”作为所有项 在“01”和“05”之间按级

我正在开发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提交日期订单 按设备编号分组

我在第二行遇到了错误。我的子查询(即以开始的查询)返回的结果如下:-

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,这就是您出现此错误的原因。删除分组依据并获取上个月的行,它可能有效。否。同样的错误,太棒了!我不知道报价的问题。删除那些引用对我来说很有效:太棒了!我不知道报价的问题。删除这些引用对我来说很有效: