使用聚合数据加入子查询
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
我在合并两个查询时遇到问题,使用 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