【问题标题】:two table join grid with distinct rows具有不同行的两个表连接网格
【发布时间】:2014-09-23 14:27:18
【问题描述】:

我想建立一个这样的表:

简要总结
两个表中的所有列。
按 DISTINCT 日行排序。
汇总每天所有到期付款NAEDO table
每天汇总所有成功/不成功的付款。 paysoft
当天支付的总额
当天未完成的总数

此网格中显示了两个表格。

您有应付款[NAEDO],并且您有已付款/未付款[paysoft]

每天有多个交易,网格按天分组,当天交易汇总在该行中。

FIDDLE与测试数据

我已经尝试了一些,但我很难加入这两个表。

SELECT 
    n.day,
    n.ACCOUNTS,
    ammount
FROM 
(
    SELECT  DISTINCT start_date, extract(day from start_date) as day, count(*)as ACCOUNTS, sum(amount)as ammount
    FROM NAEDO
    WHERE start_date >= '2014-08-13' AND start_date <= '2014-09-12'
    GROUP BY start_date
    ORDER BY start_date
) n
LEFT JOIN
(
    ????
) ps ON ps. = ps.custno
GROUP BY start_date, n.day, n.ACCOUNTS, ammount
ORDER BY start_date

因此,此查询(没有第二个空白)创建行并输入当天到期的金额和当天到期的帐户金额。
但是尝试加入表格会删除我的DISTINCT 选择

请帮助或指导我实现结果。

【问题讨论】:

  • 你能告诉我们你在尝试什么吗????部分,以及它给您带来的错误。还有,你想从join中看到什么其他的值,基本上你的目标是什么。

标签: sql postgresql


【解决方案1】:

如果我正确读取了您想要的表,则您不需要 DISTINCT,并且您的连接条件是错误的。看起来您正在尝试根据客户编号加入,但您对此不感兴趣。相反,您需要在某个日期加入 (n.start_date = ps.pay_date)。我稍微更新了您的代码,以显示我认为您希望加入工作的方式。

SELECT 
  n.day,
  n.ACCOUNTS,
  n.ammount,
  ps.amt_paid
FROM 
(
  SELECT  start_date, extract(day from start_date) as day, count(*)as ACCOUNTS, sum(amount)as ammount
  FROM NAEDO
  WHERE start_date >= '2014-07-13' AND start_date <= '2014-08-12'
  GROUP BY start_date
  ORDER BY start_date
) n
LEFT JOIN
(
  Select pay_date, sum(amount) as amt_paid
  From paysoft
  Group By pay_date
  Order By pay_date
) ps On n.start_date = ps.pay_date
Order By n.start_date

这不会影响确定成功百分比的逻辑,也不会从amt_paid 中排除失败的付款,但它应该可以帮助您入门。以这种方式构建查询也会导致计算帐户数量的问题。如上所述,它仅计算在特定日期到期的帐户数量。它可以很容易地更改为还包括在特定日期付款的帐户,但是您很可能会将某些帐户计算两次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2011-04-07
    • 2014-07-17
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多