Query:
SELECT
CASE
WHEN app_id IN ('ICTO-115') THEN 'CASH_EQUITY'
WHEN app_id IN ('ICTO-115') THEN 'FX'
END AS PRODUCT_LINE,
sum(breaches) AS TOTAL
FROM metrics_daily M
WHERE app_id IN ('ICTO-115')
GROUP BY
CASE
WHEN app_id IN ('ICTO-115') THEN 'CASH_EQUITY'
WHEN app_id IN ('ICTO-115') THEN 'FX'
END;
Table
app_id breaches
ICTO-115 26
ICTO-120 14
ICTO-569 45
ICTO-256 24
我有一个案例声明,其中app_id ICTO-115
适用于多个产品,但是[G0]中仅显示26(违规数量)之和作为GROUP BY的一部分。因此,作为查询一部分的结果仅是:
CASH_EQUITY
我想要的结果是:
Product TOTAL
CASH_EQUITY 26
我该怎么做以确保Product TOTAL
CASH_EQUITY 26
FX 26
也显示为FX
为26。total
同时适用于ICTO-115
和FX
。我还有更多app_ids适用于这种情况,但我尝试给出一个非常简单的示例。
您可以从将app_id映射到产品线的子查询开始,然后将其与表连接:
CASH_EQUITY
如果您有大量的应用程序ID /产品线映射,则将它们放置在表格中,将每个元组放在单独的行中会更简单。然后,您可以用该映射表替换派生表(子查询)。
说表select m.product_line, sum(breaches) total
from (
select 'ICTO-115' app_id, 'CASH_EQUITY' product_line from dual
union all
select 'ICTO-115', 'FW' from dual
) p
inner join metrics_daily m on m.app_id = p.app_id
group by m.product_line
:
app_to_product
现在查询可以写为:
app_id | product_line
--------- | ------------
ICTO-115 | CASH_EQUITY
ICTO-115 | FW
我建议将值放在单独的columns中,而不要放在rows >>:中
select m.product_line, sum(breaches) total
from app_to_product p
inner join metrics_daily m on m.app_id = p.app_id
group by m.product_line