使用聚合数据加入子查询

时间:2021-06-22 13:11:26

标签: sql 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

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

我的第二个查询(来自不同的表)显示了销售报价的数量:

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

也可以正常工作,显示文章编号,unqiue 报价编号的计数。

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

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

但它当然不起作用。两个表之间的链接是 DAB055.ARTNR 和 DAB020.ARTNR,但我不确定如何使语法正确。

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

编辑:只是一个说明 - 我在这里只使用一篇文章进行测试。对于最终查询,它将是几百个。

1 个答案:

答案 0 :(得分:1)

您的查询仅执行单个产品,您可以将每个查询作为 from 别名执行。由于每个返回单行,它将是 1:1 并直接拉取值。我仍然分别在每个密钥 ID 中容纳最终加入。但是,如果您需要其他 ARTNR 值,或相关日期时间范围的 ALL ARTNR,只需在 where 子句中分别从每个子查询中删除单个 ARTNR。然后,您可以获得包含订单和欧元计数/总计的所有优惠。

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