i have 2 tables in mysql database , need merge them in view. on both table must perfom math in order right result , must order them same day.
the first table 1 below , it's called chiusure
:
+----+------------+--------+--------+---------+------+----+ | id | data | totale | sconti | annulli | resi | sf | +----+------------+--------+--------+---------+------+----+ | 1 | 2016-03-01 | 153.82 | 1.07 | 0.00 | 0.00 | 34 | | 2 | 2016-03-02 | 241.58 | 0.01 | 0.00 | 0.00 | 32 | | 3 | 2016-03-03 | 0.00 | 0.01 | 0.00 | 0.00 | 0 | | 4 | 2016-03-04 | 0.00 | 0.00 | 0.00 | 0.00 | 0 | | 5 | 2016-03-05 | 0.00 | 0.00 | 0.00 | 0.00 | 0 | +----+------------+--------+--------+---------+------+----+
the second table 1 below , it's called emergenza
:
+----+------------+----------+--------+ | id | data | ora | totale | +----+------------+----------+--------+ | 1 | 2016-03-04 | 09:30:00 | 2.20 | | 2 | 2016-03-04 | 09:40:00 | 9.00 | | 3 | 2016-03-04 | 09:50:00 | 5.00 | |....|............|..........|........| | 27 | 2016-03-05 | 09:14:00 | 4.40 | | 28 | 2016-03-05 | 09:27:00 | 5.00 | | 29 | 2016-03-05 | 09:33:00 | 2.20 | |....|............|..........|........| +----+------------+----------+--------+
what find difficult here in emergenza
table there multiple row same date. in view (view_emergenza
) grouped them date in way:
select data, sum(totale) chiusura, count(id) sf emergenza group day(data);
the result is:
+------------+----------+----+ | data | chiusura | sf | +------------+----------+----+ | 2016-03-04 | 178.90 | 26 | | 2016-03-05 | 330.55 | 52 | | 2016-03-06 | 333.55 | 46 | | 2016-03-07 | 272.40 | 31 | | 2016-03-08 | 169.40 | 28 | | 2016-03-09 | 223.40 | 20 | | 2016-03-10 | 206.00 | 19 | | 2016-03-11 | 157.50 | 22 | +------------+----------+----+
moreover need perform math before summing 2 table. in view (view_chiusure
) perfomed kind of math achieve wanted results:
select data, (totale - annulli - resi) chiusura, sf chiusure
the result is:
+------------+----------+----+ | data | chiusura | sf | +------------+----------+----+ | 2016-03-01 | 153.82 | 34 | | 2016-03-02 | 241.58 | 32 | | 2016-03-03 | 0.00 | 0 | | 2016-03-04 | 0.00 | 0 | | 2016-03-05 | 0.00 | 0 | +------------+----------+----+
at point want merge 2 views in 1 unique view:
- group day(data) data
- (chiusure.totale - chiusure.annulli - chiusure.resi) + [sum(emergenza.totale) group emergenza.data emergenza.data = chiusure.data]
- chiusure.sf + [count(emergenza.id) group emergenza.data emergenza.data = chiusure.data]
update
i tried in way:
select c.data, c.chiusura + (select e.chiusura view_emergenza e e.data = c.data ) chiusura, c.sf + (select e.sf view_emergenza e e.data = c.data ) sf view_chiusure c
but seems view_chiusure.chiusura
, view_chiusure.sf
totally ignored
+------------+----------+------+ | data | chiusura | sf | +------------+----------+------+ | 2016-03-01 | null | null | | 2016-03-02 | null | null | | 2016-03-03 | null | null | | 2016-03-04 | 178.90 | 26 | | 2016-03-05 | 330.55 | 52 | | 2016-03-06 | 333.55 | 46 | | 2016-03-07 | 272.40 | 31 | | 2016-03-08 | 169.40 | 28 | | 2016-03-09 | 223.40 | 20 | | 2016-03-10 | 206.00 | 19 | +------------+----------+------+
the result should be
+------------+----------+------+ | data | chiusura | sf | +------------+----------+------+ | 2016-03-01 | 153.82 | 34 | | 2016-03-02 | 241.58 | 42 | | 2016-03-03 | 0.00 | 0 | | 2016-03-04 | 178.90 | 26 | | 2016-03-05 | 330.55 | 52 | | 2016-03-06 | 333.55 | 46 | | 2016-03-07 | 272.40 | 31 | | 2016-03-08 | 169.40 | 28 | | 2016-03-09 | 223.40 | 20 | | 2016-03-10 | 206.00 | 19 | +------------+----------+------+
is possible merge , sum 2 tables? if yes, how can it?
you must create views view_emergenza
, view_chiusure
@ first. must create view dates only:
create view vu_data ( select data view_chiusure union select data view_emergenza )
then create view distinct dates:
create view vu_distinct_data select distinct data vu_data
now can create view join base views follows:
create view vu_join select (select c.chiusura view_chiusura c c.data=d.data)+ (select e.chiusura view_emergenza e e.data=d.data) chiusura, (select c.sf view_chiusura c c.data=d.data)+ (select e.sf view_emergenza e e.data=d.data) sf, d.data vu_distinct_data d
now can use vu_join
:
select * vu_join order data
Comments
Post a Comment