Как разделить два запроса, а затем сгруппировать? - PullRequest
0 голосов
/ 03 ноября 2019

Мне нужно разделить два запроса, но мне нужно сохранить категории по группам. С моим запросом я получаю только значения и их декартово произведение.

Select m2.regionname, m2.indicatorname  CAST( m2.a2Value as float) / 
m1.a1Value
from(
select r.name as regionname , ina.name as indicatorname, sum(a.value) as 
a1Value
from Region as "r"
left join city_region as "cr" on r.region_id = cr.region_id
left join Office as "o" on cr.city_id = o.city_id
left join Assets as "a" on o.office_id = a.office_id
left join Indicators as "i" on a.indicator_id = i.indicator_id
left join IndicatorNames as "ina" on i.indicator_name_id =              
ina.indicator__name_id
where a.month between '01-01-2019' and '31-01-2019'
group by r.name, ina.name
) m1 join (
select r.name as regionname , ina.name as indicatorname, sum(a.value) as 
a2Value
from Region as "r"
left join city_region as "cr" on r.region_id = cr.region_id
left join Office as "o" on cr.city_id = o.city_id
left join Assets as "a" on o.office_id = a.office_id
left join Indicators as "i" on a.indicator_id = i.indicator_id
left join IndicatorNames as "ina" on i.indicator_name_id =  
ina.indicator__name_id
where a.month between '01-02-2019' and '27-02-2019'
group by r.name, ina.name) m2 on m1.regionname = m2.regionname

Мне нужно получить 4 строки и 3 столбца, которые включают имя региона, имя индикатора и значение с плавающей запятой. Но я не могу получить таблицу только со значениями

0,0482248520710059
0,0565972222222222
0,0665680473372781
0,078125
0,705627705627706
0,974025974025974
1,01875
1,03550295857988
1,18343195266272
1,21527777777778
1,38888888888889
1,40625
15,1515151515152
17,3160173160173
21,875
25

, но это неправильно.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

попробуй что-то вроде этого:

select *, case when a1Value=0 then null else cast(a2Value as float) / a1Value end Ratio
from (
        select r.name as regionname , ina.name as indicatorname, 
        sum(case when a.month between '01-01-2019' and '31-01-2019' then a.value else 0 end) as a1Value,
        sum(case when a.month between '01-02-2019' and '27-02-2019' then a.value else 0 end) as a2Value
        from Region r
        left join city_region cr on r.region_id = cr.region_id
        left join Office o on cr.city_id = o.city_id
        left join Assets a on o.office_id = a.office_id and a.month between '01-01-2019' and '27-02-2019'
        left join Indicators i on a.indicator_id = i.indicator_id
        left join IndicatorNames ina on i.indicator_name_id =  ina.indicator__name_id
        group by r.name, ina.name
    ) tmp
0 голосов
/ 03 ноября 2019

Это условие в предложении ON:

on m1.regionname = m2.regionname

объединит множество несвязанных строк. Вы должны установить другое условие, например:

on m1.regionname = m2.regionname and m1.indicatorname = m2.indicatorname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...