sql - 如何构建此 Oracle SQL 查询
问题描述
我需要检索由“”分隔的“CARGO#”的名称或名称,由“PNTO_VNTA”过滤
我需要这样的输出:
我做了很多测试,但他们以这种方式给我带来了结果:
这是我正在使用的代码
SELECT
s.PNTO_VNTA,
LISTAGG (g.CARGO), ', ') WITHIN GROUP (ORDER BY g.CARGO) OVER() PRODUCTOS
FROM
PNTOS_VNTA s,
CARGOS g
WHERE
s.crgo = g.CARGO
AND s.PNTO_VNTA = 12345
GROUP BY s.PNTO_VNTA,
g.cargo
;
解决方案
您同时按pnto_vnta
and分组cargo
,因此每个组合都会得到一行;然后聚合将只有一个值。您似乎试图通过添加over()
子句来使listagg()
呼叫分析来弥补这一点。
如果你改变这两个你应该得到你想要的:
SELECT
s.PNTO_VNTA,
LISTAGG (g.CARGO, ', ') WITHIN GROUP (ORDER BY g.CARGO) PRODUCTOS
FROM
PNTOS_VNTA s,
CARGOS g
WHERE
s.crgo = g.CARGO
AND s.PNTO_VNTA = 12345
GROUP BY s.PNTO_VNTA
;
或者使用 ANSI 连接语法:
SELECT
s.PNTO_VNTA,
LISTAGG (g.CARGO, ', ') WITHIN GROUP (ORDER BY g.CARGO) PRODUCTOS
FROM PNTOS_VNTA s
JOIN CARGOS g ON s.crgo = g.CARGO
WHERE s.PNTO_VNTA = 12345
GROUP BY s.PNTO_VNTA
;
虽然看起来你不需要加入;除非您有空值或孤儿,否则您可能可以这样做:
SELECT
s.PNTO_VNTA,
LISTAGG (s.CRGO, ', ') WITHIN GROUP (ORDER BY s.CRGO) PRODUCTOS
FROM PNTOS_VNTA s
WHERE s.PNTO_VNTA = 12345
GROUP BY s.PNTO_VNTA
;
(我已经留下s.crgo
了所有这些;不确定这是否是您问题中的错字。)
推荐阅读
- ios - 在应用商店上传构建需要太多时间
- git - 如何修复 gitbash 中的“致命:不能使用 C:/Users/Administrator/ 作为排除文件”错误?
- javascript - 通过 Javascript 监听 Http 服务器端请求(文档类型)事件
- android - React-native-gesture-handler swipeable 不适用于 Android
- python - 无法从网站上抓取一些值
- ruby-on-rails - 如何在 lib 文件夹中生成控制器/模型/视图?(Ruby on Rails)
- api - 在 Net Core Controller 中接收 IFileForm 并转发到另一个(独立)API
- google-sheets - 使用自定义谷歌表格格式前导零
- haskell - 确定总的终止函数
- c# - 是否可以为外键配置 EF 核心“ON UPDATE”行为?