【问题标题】:Is it possible to sum cells from two different tables with the same figure from another cell是否可以将两个不同表格中的单元格与另一个单元格中的相同数字相加
【发布时间】:2019-11-30 13:16:02
【问题描述】:

抱歉,如果我的术语不是 100% 正确,因为我是新手。

我目前正在尝试使用查询来生成表格,但是我需要将两个不同表格中的数字与另一个单元格中的相同数字相加。

示例:

销售表 列:folio_id 和 item_amount

付款表: 列:folio_id 和 payment_amount

我有两个独立的查询,但需要一些方法将它们联系在一起。

销售:

SELECT DISTINCT FT.FOLIO_ID AS FOLIO_ID,
    SUM(FT.PRICE_WITH_SURCHARGES) AS TOTAL_CHARGES
FROM    DEV.VR_FIT_SALES FT
WHERE   FT.PRICE_WITH_SURCHARGES <> 0
AND FT.ITEM_OPERATING_DAY IS NOT NULL
GROUP BY    FT.FOLIO_ID

付款:

SELECT DISTINCT FT.FOLIO_ID AS FOLIO_ID,
    SUM(FT.AMOUNT) AS TOTAL_CHARGES
FROM    DEV.VR_FIT_PAYMENTS FT
WHERE   FT.AMOUNT <> 0
GROUP BY    FT.FOLIO_ID

我不能只加入表格,因为一个中可能有 folio_id 条目,而另一个中可能没有,反之亦然。理想情况下,我正在为每个 folio_id 寻找一行来总结 item_amount 和 payment_amount。

有没有人可以帮忙。

谢谢

【问题讨论】:

  • 样本数据和期望的结果将有助于解释您要做什么。另外,标记您正在使用的数据库。

标签: sql


【解决方案1】:

如果您想要每个作品集的总费用和付款,则需要将两个查询的结果放在同一行中。一种方法使用UNION ALL 和聚合:

SELECT FOLIO_ID,
       SUM(TOTAL_CHARGES) as TOTAL_CHARGES,
       SUM(TOTAL_PAYMENTS) as TOTAL_PAYMENTS
FROM ((SELECT FT.FOLIO_ID AS FOLIO_ID, SUM(FT.PRICE_WITH_SURCHARGES) AS TOTAL_CHARGES, 0 AS TOTAL_PAYMENTS
       FROM DEV.VR_FIT_SALES FT
       WHERE FT.PRICE_WITH_SURCHARGES <> 0 AND
             FT.ITEM_OPERATING_DAY IS NOT NULL
       GROUP BY FT.FOLIO_ID
      ) UNION ALL
      (SELECT FT.FOLIO_ID AS FOLIO_ID, 0, SUM(FT.AMOUNT) AS TOTAL_PAYMENTS
       FROM DEV.VR_FIT_PAYMENTS FT
       WHERE FT.AMOUNT <> 0
       GROUP BY FT.FOLIO_ID
      )
     ) F
GROUP BY FOLIO_ID;

【讨论】:

  • 这太棒了,非常感谢。除了我的查询的一部分之外,它对所有的都有效。我不得不添加一个额外的列,但我知道似乎是在乘以付款的总和。例如,它将付款总和乘以销售结果的数量。你能帮忙吗?
  • 选择不同的 P2.FOLIO_ID 作为 FOLIO_ID,0 作为 TOTAL_CHARGES,SUM(P2.AMOUNT) 作为来自 DEV.VR_PMS_PAYMENTS P2、DEV.VR_PMS_SALES P3 的 TOTAL_PAYMENTS,其中 P2.FOLIO_ID = P3.FOLIO_ID 和 P2.AMOUNT 0 AND P2.PMS_OPERATING_DAY
【解决方案2】:

只需将它们放入子查询中,然后加入它们。

如果您的 DBMS 支持 FULL JOIN,那么下面的查询将返回两个表中任意一个中的 FOLIO_ID。
INNER JOIN 将仅返回两者中的 FOLIO_ID。

SELECT 
COALESCE(SALE.FOLIO_ID, PAYMENT.FOLIO_ID) AS FOLIO_ID,
SALE.TOTAL_SALE_CHARGES,
PAMENT.TOTAL_PAYMENT_CHARGES
FROM 
(
    SELECT FOLIO_ID
    , SUM(PRICE_WITH_SURCHARGES) AS TOTAL_SALE_CHARGES
    FROM DEV.VR_FIT_SALES
    WHERE PRICE_WITH_SURCHARGES <> 0
      AND ITEM_OPERATING_DAY IS NOT NULL
    GROUP BY FOLIO_ID
) AS SALE
FULL JOIN
(
    SELECT FOLIO_ID
    , SUM(AMOUNT) AS TOTAL_PAYMENT_CHARGES
    FROM DEV.VR_FIT_PAYMENTS
    WHERE AMOUNT <> 0
    GROUP BY FOLIO_ID
) AS PAYMENT ON SALE.FOLIO_ID = PAYMENT.FOLIO_ID
ORDER BY FOLIO_ID;

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2020-11-15
    相关资源
    最近更新 更多