Reputation: 97
I have a table in the below format with multiple Id's, months (1-72) multiple measures (1-40). Below is the sample table. The entries for a few months are missing for each measure as seen (Month 5,8 is missing for Measure1, month 8 and 9 is missing for Measure3 and so on). I want to create a new measure, say measure 4 which is the sum of 2 measures (say measure1+measure3) for each Id, month. I tried using the lag/lead functions but I could not account it for missing months.
+----+-------+--------------+---------------+
| ID | month | measure name | measure value |
+----+-------+--------------+---------------+
| 1 | 1 | Measure1 | 20 |
| 1 | 2 | Measure1 | 80 |
| 1 | 3 | Measure1 | 60 |
| 1 | 4 | Measure1 | 40 |
| 1 | 6 | Measure1 | 100 |
| 1 | 7 | Measure1 | 250 |
| 1 | 9 | Measure1 | 60 |
| 1 | 10 | Measure1 | 70 |
| 1 | 1 | Measure2 | 40 |
| 1 | 2 | Measure2 | 30 |
| 1 | 3 | Measure2 | 25 |
| 1 | 4 | Measure2 | 75 |
| 1 | 5 | Measure2 | 115 |
| 1 | 6 | Measure2 | 80 |
| 1 | 7 | Measure2 | 85 |
| 1 | 9 | Measure2 | 95 |
| 1 | 10 | Measure2 | 200 |
| 1 | 1 | Measure3 | 220 |
| 1 | 2 | Measure3 | 50 |
| 1 | 3 | Measure3 | 60 |
| 1 | 4 | Measure3 | 90 |
| 1 | 5 | Measure3 | 20 |
| 1 | 6 | Measure3 | 70 |
| 1 | 7 | Measure3 | 80 |
| 1 | 10 | Measure3 | 105 |
+----+-------+--------------+---------------+
The final output should look something like this (measure4 = measure1+measure3).
+----+-------+--------------+---------------+
| ID | month | measure name | measure value |
+----+-------+--------------+---------------+
| 1 | 1 | Measure4 | 240 |
| 1 | 2 | Measure4 | 130 |
| 1 | 3 | Measure4 | 120 |
| 1 | 4 | Measure4 | 130 |
| 1 | 5 | Measure4 | 20 |
| 1 | 6 | Measure4 | 170 |
| 1 | 7 | Measure4 | 330 |
| 1 | 9 | Measure4 | 60 |
| 1 | 10 | Measure4 | 175 |
+----+-------+--------------+---------------+
Can you please help me with this? Thanks
Upvotes: 0
Views: 33
Reputation: 222402
You could filter on the two measures that you are interested in, then use aggregation:
select
month,
'Measure4' measure_name,
sum(measure_value) measure_value
from mytable
where measure_name in ('Measure1', 'Measure3')
group by month
order by month
This assumes that at least one of the two measures is available for each month (otherwise you would have missing month
es in the resultset), which is consistent with your sample data.
Upvotes: 1