【问题标题】:SQL (Oracle): group by bounded to certain columnsSQL (Oracle):按特定列分组
【发布时间】:2017-10-05 09:00:29
【问题描述】:

问题如下:我需要显示每个客户支付的数量(使用 COUNT() 函数)(用 codcli 列的代码标识)但被某些人过滤部门(tipope 列)。正如您在图片中看到的那样,数字已显示,但在各个部门之间进行了拆分,而我希望每个客户只显示一次。

如何在不拆分付款的情况下进行过滤?

【问题讨论】:

  • 添加一些示例表数据和预期结果 - 全部为格式化文本(不是图像)。同时向我们展示您当前的查询尝试。
  • 抱歉,由于公司防火墙,看不到图像:/ - 您可以使用sqlfiddle.com 来演示该问题吗?
  • 抱歉,这是 SQL 查询:select codcli, tipope, count(codcli) as somma_bonifici from mov group by codcli, tipope 在 ('VE5', 'VE9', 'PR5', 'PR9') 由 codcli 订购
  • @AndreaZed 以表格文本格式发布所需的输出

标签: sql oracle group-by


【解决方案1】:

也许我没有正确理解你的问题,但为什么不简单:

SELECT CODCLI, COUNT(*) AS SOMMA_BONIFICI
FROM MOV
WHERE TIPOPE IN ( 'VE5', ' VE9', 'PR5', 'PR9')
GROUP BY CODCLI
ORDER BY CODCLI;

【讨论】:

  • 更简单!感谢您的帮助
【解决方案2】:

不要在外部查询中包含分区 (Tipope),而在子查询中包含您的 COUNT

SELECT CODCLI, SUM(SELECT COUNT(sub.CODCLI) 
                   FROM mov sub
                   WHERE sub.TIPOPE = TIPOPE 
                   GROUP BY sub.CODCLI) AS SOMMA_BONIFICI
FROM mov
WHERE TIPOPE IN ('VE5', ' VE9', 'PR5', 'PR9')
GROUP BY CODCLI
ORDER BY CODCLI

哪个会输出:

CODCLI   SOMMA_BONIFICI
AA200078 16
AA200300 10
AA200412 3
AA200309 9

【讨论】:

  • 已经完成,但我需要按部门过滤,否则我会使用 count() 函数获得不同的数字
  • 感谢您的帮助!
  • @etsa 我也没有,我猜他们不喜欢我的工作
  • 我会给你我的投票。实际上您的查询有点多余,但我根本不喜欢反对票,因为不考虑人们所做的努力。
  • @etsa yeh 我的回答是在 OP 的额外澄清之前
猜你喜欢
  • 2019-09-13
  • 2012-08-24
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2015-02-25
  • 2017-10-10
  • 1970-01-01
相关资源
最近更新 更多