WITH status(status, status_id, probability_pc) as (VALUES ('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70), ('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0) ), line as ( SELECT siv.__id as siv_uid, siv.discount, siv.type as line_pricing_model_id ,siv.hash as line_key, siv.is_actual as siv_is_actual ,siv.version::numeric as line_version ,d.__index as deal_index ,d._companies ,a.index as agreement_version ,siv.date_nop::date as dt_from ,siv.date_end::date as dt_to ,siv.is_easy as is_simple ,siv.cnt -- should mutiliply ,s.probability_pc ,a.__id as agreement_uid, a.contract_uid, a.is_actual as agreement_is_actual, a.deal_uid ,d.__name as deal, d.__status_status as deal_status_id --,c.__name as contract ,siv.user_description ,siv.params --,(SELECT sum(p.price*p.cnt*(100.0-COALESCE(p.discount,0.0))/100.0) FROM elma.service_parametrs p WHERE(p.__id = ANY (siv.params))) as cost FROM elma.deals_services siv JOIN elma.deals d on (d.__id = ANY(siv.deal)) JOIN status s on (d.__status_status=s.status_id) LEFT OUTER JOIN elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement)) WHERE siv.is_actual AND siv."__deletedAt" IS NULL AND d."__deletedAt" IS NULL AND a."__deletedAt" IS NULL AND a.is_actual AND siv.type IN (2,3) ), component as ( SELECT price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost ,price ,cnt ,code ,__id FROM elma.service_parametrs where "__deletedAt" IS NULL ), stair as ( -- рабочая лесенка (инстансы строк, имеющие нетривиальную вероятность) select * FROM ( SELECT *, MIN(dt_from) OVER (PARTITION BY line_key ORDER BY deal_index desc) running_min_dt FROM line WHERE probability_pc > 0 ) t WHERE t.dt_from = t.running_min_dt AND t.dt_to > CURRENT_TIMESTAMP OR t.dt_to IS NULL ), alloc as (select c."WZ" as wz , round(sum(c."VM_RAM_Allocated")) as ram , round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_RAM_Allocated" ELSE 0 END)) as ram_on , round(sum(c."VM_vCPU_count")) as cpu , round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_vCPU_count" ELSE 0 END)) as cpu_on from vmreports.compute c where ts=(select max(ts) from vmreports.compute) group by c."WZ" ), disk_alloc as (select c."WZ" as wz , round(sum(c."Disk_Allocated")) as disk_alloc from vmreports.storage c where ts=(select max(ts) from vmreports.storage) group by c."WZ" ), sold_ram as (SELECT z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity ,count(*) as lines, STRING_AGG(c.code,', ') as codes /*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ FROM stair o JOIN elma.companies z on (o._companies=z.__id) LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) WHERE c.code LIKE 'iaas.ngc.%.ram-_' AND c.cnt <> 0 AND o.cnt <> 0 GROUP BY z.id_klienta, z.__id, z.__name ), sold_cpu as (SELECT z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity ,count(*) as lines, STRING_AGG(c.code,', ') as codes /*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ FROM stair o JOIN elma.companies z on (o._companies=z.__id) LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) WHERE c.code LIKE 'iaas.ngc.%.vcpu%-_' AND c.cnt <> 0 AND o.cnt <> 0 GROUP BY z.id_klienta, z.__id, z.__name ), sold_disk as (SELECT z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity ,count(*) as lines, STRING_AGG(c.code,', ') as codes /*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ FROM stair o JOIN elma.companies z on (o._companies=z.__id) LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) WHERE c.code SIMILAR TO 'iaas.ngc.%.(ssd|fstssd|sata)-_' AND c.cnt <> 0 AND o.cnt <> 0 GROUP BY z.id_klienta, z.__id, z.__name ), deal_stat as ( select STRING_AGG(distinct deal_status_id::text,', ') as status_ids , z.id_klienta as WZ from line o join elma.companies z on (o._companies=z.__id) GROUP BY z.id_klienta ) select r.wz as wz_sold r.client as client_sold r.company_uid a.wz as wz_alloc ds.status_ids r.codes as ram_codes r.quantity as ram_sold a.ram as ram_alloc a.ram_on as ram_alloc_on c.codes as cpu_codes c.quantity as cpu_sold a.cpu as cpu_alloc a.cpu_on as cpu_alloc_on d.codes as disk_codes d.quantity as disk_sold da.disk_alloc z.__name as alloc_company z.__id as alloc_company_uid from sold_ram r join deal_stat ds on (r.wz=ds.wz) join sold_cpu c on (r.wz=c.wz) left join sold_disk d on (r.wz=d.wz) full join alloc a on (r.wz=a.wz) left join disk_alloc da on (a.wz=da.wz) left join elma.companies z on (lower(a.wz)=lower(z.id_klienta)) where 1=1 order by 1,3 Сверка CRM - Cloud
#wz_sold# #client_sold# #alloc_company# #wz_alloc# #status_ids# #ram_codes# style="background:lightgreen;">#ram_sold# style="background:lightcoral;">#ram_alloc# style="background:lightcoral;">#ram_alloc_on# #cpu_codes# style="background:lightgreen;">#cpu_sold# style="background:lightcoral;">#cpu_alloc# style="background:lightcoral;">#cpu_alloc_on# #disk_codes# style="background:lightgreen;">#disk_sold# style="background:lightcoral;">#disk_alloc#