当前位置: 首页 > 面试题库 >

ORACLE / SQL:wm_concat和订购者

曾高杰
2023-03-14
问题内容

我正在通过ODBC和Crystal Report 2008使用oracle 11(不确定确切的版本,但是由于LISTAGG无法正常工作,我想它不是第2版)。

这是我遇到的问题:

这是一张桌子:

TABLE ODB.TASK_CARD_CONTROL  
------------------------------------------  
task_card     control_category     code  
------------------------------------------  
1                  zone             17  
1                  zone             33  
1                  zone             21  
2                  zone             18  
2                  zone             05  
3                  zone             55  
3                  zone             32  
3                  zone             72

我正在使用WM_CONCAT函数来获取如下内容:

task_card      zones
1              17,33,21
2              18,05
3              55,32,72

这是用于此的SQL:

SELECT TASK_CARD, WM_CONCAT(code) as ZONES
FROM ODB.TASK_CARD_CONTROL
WHERE ODB.TASK_CARD_CONTROL.CONTROL_CATEGORY = 'ZONE'
GROUP BY TASK_CARD

但我希望对区域进行排序,因此我尝试了以下操作:

SELECT TASK_CARD, WM_CONCAT(code) as ZONES
FROM (SELECT TASK_CARD, CODE, CONTROL_CATEGORY FROM ODB.TASK_CARD_CONTROL 
ORDER BY CODE)
WHERE ODB.TASK_CARD_CONTROL.CONTROL_CATEGORY = 'ZONE'
GROUP BY TASK_CARD

但由于某种原因,它返回以下错误:

Failed to retrieve data from the database.
Details: 42S22:[Oracle][ODBC][Ora]ORA-00904: 
"ODB"."TASK_CARD_CONTROL"."CONTROL_CATEGORY" : invalid identifier

我真的不明白我在这里做错了什么…有人可以给我一个提示吗?


问题答案:

您不能从内部查询外部引用ODB.TASK_CARD_CONTROL.CONTROL_CATEGORY。尝试:

SELECT TASK_CARD, WM_CONCAT(code) as ZONES
FROM (SELECT TASK_CARD, CODE, CONTROL_CATEGORY FROM ODB.TASK_CARD_CONTROL 
      WHERE ODB.TASK_CARD_CONTROL.CONTROL_CATEGORY = 'ZONE'
      ORDER BY CODE)
GROUP BY TASK_CARD


 类似资料:
  • 问题内容: 我有一个与数据库对话的servlet,然后返回一个有序(按时间排序)对象的列表。在servlet部分,我有 从日志中,我可以看到数据库以正确的顺序返回了User对象。 在前端,我有 但是顺序改变了。 我只在返回的列表很大(超过130个用户)时才注意到这一点。 我尝试使用Firebug进行调试,Firebug中的“响应选项卡”显示列表的顺序与servlet中的日志不同。 我做错了什么吗?

  • 我是Flink的新手,我试图理解Flink是如何在其的并行抽象中命令调用。考虑这个产生部分和的流的例子: 我希望它的输出是流:。事实上,就在这里。 是否可以安全地假设这种情况始终存在,尤其是在从具有大量并行性的源读取数据时?

  • 问题内容: 在Java中,是否有一个对象的作用类似于用于存储和访问键/值对的Map,但是可以返回键的有序列表和值的有序列表,从而使键和值列表的顺序相同? 因此,按照代码进行解释,我正在寻找某种行为,就像我的虚拟OrderedMap: 问题答案: 该SortedMap的接口(与实施TreeMap的)应该是你的朋友。 该接口具有以下方法: keySet() 它以升序返回一组键 values() 它以对

  • 问题内容: 我有一个Vehicles的PriorityQueue,其中有一个项目未正确订购。我认为我的compareTo中有些东西很奇怪,但是我找不到它。 我有一个主类,它创建PriorityQueue,创建一堆Vehicle对象,然后将它们添加到队列中。 我期望这个输出: 但是我得到了这个: 问题答案: 您的队列和方法可能正常工作。请注意API关于它的说明: 此类及其迭代器实现Collectio

  • 问题内容: 是否可以对第一个查询进行排序并保留返回的行作为第一行,而不对第二个查询进行排序。(如果有道理) 我当前查询的一个示例是: 我希望“苹果”类别下的设备将按照该列表的顺序进行组织,并位于其他设备上方的列表顶部。但这似乎使两个查询混杂在一起。 问题答案: 您需要引入一个人工排序键。就像是:

  • 订购可以看作是一个丰富的比较器,具有增强的链接功能,多种实用方法,多种类型的排序功能等。 Class 声明 (Class Declaration) 以下是com.google.common.collect.Ordering《T》类的声明 - @GwtCompatible public abstract class Ordering<T> extends Object implem