【发布时间】:2017-12-18 10:37:41
【问题描述】:
Oracle Database 12c 企业版 12.1.0.2.0 有人可以帮助我查询 Oracle
**TABLE A** **TABLE B** **TABLE usuarios**
RU RU DESCRIP iduser
================== ==================== =======================
| adm | | adm | hi | | 1 |
| adm | | adm | help | | 1 |
| adm | | adm | me | | 1 |
| usr | | urs | good day | | 1 |
| rhm | | rhm | s | | 1 |
table usuario 是参考 >> Table A 和 Table A 参考 >> Table B
这是我的查询和 结果是
adm = 嗨,嗨,嗨
SELECT case row_number()
over (partition by A.ru by B.descrip) WHEN 1
THEN A.RU
END as RU,
LISTAGG(B.descrip, ', ')
WITHIN GROUP (ORDER BY A.RU) "names"
FROM A
INNER JOIN usuarios on usuarios.iduser = A.iduser
LEFT JOIN B ON B.RU = A.RU
WHERE A.iduser = 1
GROUP BY A.RU, B.descrip
ORDER BY A.RU, B.descrip
我需要这个结果
RESULT
adm = hi help me
usr = good day
rhm = s
【问题讨论】:
-
恐怕您的表 B 缺少一些关于每个描述词应采用的 顺序 的重要信息。
-
除了 Tim 的问题(你如何确定以什么顺序连接值?)之外,至少还有两个重要的问题。 (1) 你有什么版本的Oracle?不同的工具有不同的版本。不要猜测;运行
select * from v$version并报告完整(五部分)版本,如 12.1.0.2.0。 (2) 连接的结果会不会很长(超过 4000 字节)?您需要哪些工具在很大程度上取决于此。 -
在您现有的代码中,首先突出(并导致意外结果)的是您按
ru和descrip分组。您不应按descrip分组。