I’m having two tables
Calendar
x
FirstDate | LastDate
------------+-----------
2020-05-01 2020-05-03
2020-05-02 2020-05-04
ProfileRate
ID | Date | Rate | Product
---+------------+------+----------
1 2020-05-01 100 Prod1
2 2020-05-02 200 Prod1
3 2020-05-03 300 Prod1
4 2020-05-04 400 Prod1
5 2020-05-01 150 Prod2
6 2020-05-02 250 Prod2
7 2020-05-03 350 Prod2
8 2020-05-04 450 Prod2
I want to calculate SUM. Something like this
FirstDate | LastDate | Prod1 | Prod2
------------+-------------+--------+-------
2020-05-01 2020-05-03 600 750
2020-05-02 2020-05-04 900 1050
What I’ve tried:
SELECT [Date], SUM([Rate])
FROM [ProfileRate]
WHERE [Date] BETWEEN '2020-05-01' AND '2020-05-04'
GROUP BY [Date]
Please help me. Thanks
Advertisement
Answer
you have to do several steps to solve the problem:
- combine calendar records with profiles
- establish which profiles meet the calendar range
- total the value for each profile and date range
- finally establish the detailed information of the calendar
this query meets the conditions
with DataForCalendar as
(
SELECT IdCalendar,FirstDate,LastDate,Id,DateRate,Rate,Product
FROM
Calendar CROSS JOIN ProfileRate
where DateRate between '2020-05-01' and '2020-05-05'
),
DetailForCalendar as
(
select IdCalendar,Rate,Product
from DataForCalendar
where DateRate between FirstDate and LastDate
),
TotalForCalendar as
(
select IdCalendar,Product,sum(Rate)As Total from DetailForCalendar
GROUP BY IdCalendar,Product
)
select Calendar.IdCalendar,Calendar.FirstDate,Calendar.LastDate,
TotalForCalendar.Product,TotalForCalendar.Total
from TotalForCalendar inner join
Calendar on TotalForCalendar.IdCalendar=Calendar.IdCalendar;
in this example you can find step by step how it work
in this example there is one more product and one more calendar.