I have a transaction table like this:
Trandate channelID branch amount --------- --------- ------ ------ 01/05/2019 1 2 2000 11/05/2019 1 2 2200 09/03/2020 1 2 5600 15/03/2020 1 2 600 12/10/2019 2 10 12000 12/10/2019 2 10 12000 15/11/2019 4 7 4400 15/02/2020 4 2 2500
I need to sum amount and count transactions by year and month. I tried this:
select DISTINCT DATEPART(YEAR,a.TranDate) as [YearT], DATEPART(MONTH,a.TranDate) as [monthT], count(*) as [countoftran], sum(a.Amount) as [amount], a.Name as [branch], a.ChannelName as [channelID] from transactions as a where a.TranDate>'20181231' group by a.Name, a.ChannelName, DATEPART(YEAR,a.TranDate), DATEPART(MONTH,a.TranDate) order by a.Name, YearT, MonthT
It works like charm. However, I will use this data on PowerBI thus I cannot show these results in a “line graphic” due to the year and month info being in separate columns.
I tried changing format on SQL to 'YYYYMM'
alas powerBI doesn’t recognise this column as date.
So, in the end, I need a result table looks like this:
YearT channelID branch Tamount TranT --------- --------- ------ ------- ----- 31/05/2019 1 2 4400 2 30/03/2020 1 2 7800 2 31/10/2019 2 10 24000 2 30/11/2019 4 7 4400 1 29/02/2020 4 2 2500 1
I have tried several little changes with no result.
Help is much appreciated.
Advertisement
Answer
You may try with the following statement:
SELECT EOMONTH(DATEFROMPARTS(YEAR(Trandate), MONTH(Trandate), 1)) AS YearT, branch, channelID, SUM(amount) AS TAmount, COUNT(*) AS TranT FROM (VALUES ('20190501', 1, 2, 2000), ('20190511', 1, 2, 2200), ('20200309', 1, 2, 5600), ('20200315', 1, 2, 600), ('20191012', 2, 10, 12000), ('20191012', 2, 10, 12000), ('20191115', 4, 7, 4400), ('20200215', 4, 2, 2500) ) v (Trandate, channelID, branch, amount) GROUP BY DATEFROMPARTS(YEAR(Trandate), MONTH(Trandate), 1), branch, channelID ORDER BY DATEFROMPARTS(YEAR(Trandate), MONTH(Trandate), 1)
Result:
YearT branch channelID TAmount TranT 2019-05-31 2 1 4200 2 2019-10-31 10 2 24000 2 2019-11-30 7 4 4400 1 2020-02-29 2 4 2500 1 2020-03-31 2 1 6200 2