使用聚合数据加入子查询

joining a subquery with aggregate data

我在合并两个查询时遇到问题,使用 join/subquery。

我的第一个查询是提取销售总额(这个例子只提取一个产品):

SELECT
DAB020.ARTNR,
SUM(DAB020.RE_WERT) as "Total Euros",
COUNT(DISTINCT DAB020.ANUMMER) as "Number of Orders"
FROM "DAB020.ADT" DAB020
WHERE DAB020.RE_DATUM >= { d '2021-01-01' } AND DAB020.ARTNR = '123456'
GROUP BY DAB020.ARTNR

示例结果:

ARTNR   Total VK €  Auftrag Nr
123456  999999,50   60

效果很好,给一篇文章,今年的总销售额+订单号的唯一数量。

我的第二个查询(来自另一个 table)显示了销售报价的数量:

Select
COUNT(DISTINCT left (DAB055.APNUMMER,6)) as "# offers"
FROM "DAB055.ADT" DAB055
WHERE (DAB055.BUCH_DATUM>={d '2021-01-01'}) // YYYY.MM.DD
AND DAB055.ARTNR = '123456'

示例结果:

ARTNR   # offers
123456  120

也很好用,显示商品编号,未求报价数。

现在我想将报价结果附加到销售结果的末尾:

SELECT
DAB020.ARTNR,
SUM(DAB020.RE_WERT) as "Total Euro",
COUNT(DISTINCT DAB020.ANUMMER) as"Number of Orders",

left join (
  Select
  COUNT(DISTINCT left (DAB055.APNUMMER,6)) as "# offers"
  FROM "DAB055.ADT" DAB055
  WHERE (DAB055.BUCH_DATUM>={d '2021-01-01'}) // YYYY.MM.DD
  ) as results on DAB055.ARTNR = DAB020.ARTNR

FROM "DAB020.ADT" DAB020
WHERE DAB020.RE_DATUM >= { d '2021-01-01' } AND DAB020.ARTNR = '969226'
GROUP BY DAB020.ARTNR

期望的结果:

ARTNR   Total VK €  Auftrag Nr  # offers
123456  999999,50   60          120

但这当然行不通。两个 table 之间的 link 是 DAB055.ARTNR 和 DAB020.ARTNR,但我不确定如何使语法正确。

有人可以澄清我的错误吗? 谢谢!

编辑:只是一个注释 - 我在这里只使用一篇文章进行测试。最后查询的话,就是几百。

您的查询仅针对单个产品,您可以将每个查询作为发件人别名进行查询。由于每个 returns 一行,它将是 1:1 并直接提取值。我仍然分别拥有每个密钥 ID 以适应最终加入。但是,如果您想要其他 ARTNR 值,或所有 ARTNR 用于相关日期时间范围,只需分别从 where 子句中的每个子查询中删除单个 ARTNR 。然后你可以得到所有订单和欧元的报价 counts/totals.

SELECT
        Q1.ARTNR,
        Q1.TotalEuro "Total Euro",
        Q1.NumberOfOrders "Number of Orders",
        Q2.NumberOffers "# Offers"
    from
        ( SELECT
                DAB020.ARTNR,
                SUM(DAB020.RE_WERT) as TotalEuro,
                COUNT(DISTINCT DAB020.ANUMMER) as NumberofOrders,
            FROM 
                "DAB020.ADT" DAB020
            WHERE 
                    DAB020.RE_DATUM >= { d '2021-01-01' } 
                AND DAB020.ARTNR = '969226'
            GROUP BY 
                DAB020.ARTNR ) Q1
    JOIN
        ( Select
                DAB055.ARTNR,
                COUNT(DISTINCT left (DAB055.APNUMMER,6)) as NumberOffers
            FROM 
                "DAB055.ADT" DAB055
            WHERE 
                    DAB055.BUCH_DATUM >= { d '2021-01-01'}
                AND DAB055.ARTNR = '969226'
            GROUP BY
                DAB055.ARTNR ) Q2
         on Q1.ARTNR = Q2.ARTNR