【问题标题】:joining a subquery with aggregate data加入带有聚合数据的子查询
【发布时间】:2021-09-06 02:03:27
【问题描述】:

我在使用联接/子查询组合两个查询时遇到问题。

我的第一个查询是提取销售总额(本示例仅提取一个产品):

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,但我不确定如何正确获取语法。

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

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

【问题讨论】:

  • 也许展示一个输入和输出数据的小模型示例。
  • “追加到末尾”和“它不起作用”不清楚。所以不清楚你希望输出如何成为输入的函数。 minimal reproducible exampleHow to Ask
  • 嗨,我已经更新了一些结果示例和预期结果。目前,在运行查询时,我收到消息“未找到预期的词法元素:标识符或表达式”。

标签: sql join subquery


【解决方案1】:

您的查询只做一个产品,您可以将每个查询作为一个别名来做。由于每个都返回单行,因此它将是 1:1 并直接提取值。我仍然在每个中分别拥有密钥 ID 以适应最终加入。但是,如果您想要其他 ARTNR 值或所有 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多