gpt4 book ai didi

sql - 甲骨文/SQL : wm_concat & order by

转载 作者:行者123 更新时间:2023-12-01 11:06:41 25 4
gpt4 key购买 nike

我正在通过 ODBC 和 Crystal Reports 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

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

最佳答案

对于仍在使用 wm_CONCAT(又名旧数据库版本)的任何人:
解决方案是添加不同的条件,然后它也会对连接的值应用升序。

不要问为什么它没有记录,但它会起作用。

此外,在子查询中使用 order by 在 wm_concat 之前只会随机化顺序,因此不应该推荐它。

请求的 SQL 示例:

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

请注意,当在 processes/packages 中使用时, distinct 选项不起作用。

关于sql - 甲骨文/SQL : wm_concat & order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com