CASE语句-同一条件适用于多个情况

问题描述 投票:1回答:2
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-115FX。我还有更多app_ids适用于这种情况,但我尝试给出一个非常简单的示例。

sql oracle join oracle11g bigdata
2个回答
1
投票

您可以从将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

0
投票

我建议将值放在单独的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
© www.soinside.com 2019 - 2024. All rights reserved.