Наличие / SUMIFS в SQL - PullRequest
0 голосов
/ 01 мая 2020

Я получаю данные о доходах за 2 года из таблицы (2019 и 2020), и я хочу поставить условие, чтобы извлекать только те, которые имеют значение выше 0 в 2020 году. Для результатов, которые проходят этот фильтр, я хочу уметь просматривать данные как за 2019, так и за 2020 год.

Ниже приведен базовый запрос c, который я использую.

SELECT 

Year(CPG.day) as 'Year' --1
, CLI.global_account_name AS 'Global Account' --2
, sum (CPG.revenue_usd_plan_rate) as 'Rev' --3
, sum (CPG.rext_usd_plan_rate) as 'RexT' --4

FROM ABC.factBLABLA CPG
LEFT JOIN BLBLADA.ADD CLI ON CLI.client_id=CPG.client_id
LEFT JOIN DADA.PEPE.dim ON camp.campaign_id = CPG.campaign_id
LEFT JOIN BLALBA.PEPE tax ON tax.product_taxonomy_id = camp.product_taxonomy_id

WHERE CPG.day between '2019-01-01' and '2020-12-31' 
GROUP BY 1,2

Having ??

1 Ответ

0 голосов
/ 01 мая 2020

Если ваша база данных поддерживает оконные функции, вы можете установить условное максимальное окно для получения дохода за 2019 год и использовать эту информацию для фильтрации:

select yr, global_account, rev, rext
from (
    select 
        year(cpg.day) yr,
        cli.global_account_name as global_account,
        sum(cpg.revenue_usd_plan_rate) rev,
        sum(cpg.rext_usd_plan_rate) as rext,
        max(case when year(cpd.day) = 2019 then sum(cpg.revenue_usd_plan_rate) end)
            over(partition by cli.global_account_name) rev_2019
    from abc.factblabla cpg
    left join blblada.add cli on cli.client_id=cpg.client_id
    left join dada.pepe.dim on camp.campaign_id = cpg.campaign_id
    left join blalba.pepe tax on tax.product_taxonomy_id = camp.product_taxonomy_id
    where cpg.day between '2019-01-01' and '2020-12-31' 
    group by 1,2
) t
where rev_2019 > 0
...