Привет У меня есть одно сомнение в SQL Server:
в моей таблице есть 4 значения, относящиеся к Querter доступны.здесь я хочу разделить значения суммы q1 на месяцы (апрель, май, июнь) текущего года и значения суммы q2 на месяцы (июль, август, сентябрь) текущего года значения суммы q3 на месяцы (октябрь, ноябрь, декабрь) текущего годаq4 сумма значений в месяцах (январь, февраль, март) текущего года, если я запускаю текущие месяцы (январь или февраль или март), то рассматриваю год как текущий год, за исключением следующего года текущего года.
таблица:
CREATE TABLE [dbo].[task](
[Vertical] [varchar](50) NULL,
[AccountName] [varchar](50) NULL,
[q1] [money] NULL,
[q2] [money] NULL,
[q3] [money] NULL,
[q4] [money] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[task] ([Vertical], [AccountName], [q1], [q2], [q3], [q4]) VALUES (N'BFSI', N'susse', 90.0000, 15.0000, 30.0000, 6.0000)
GO
INSERT [dbo].[task] ([Vertical], [AccountName], [q1], [q2], [q3], [q4]) VALUES (N'BFSI', N'AIG', 100.0000, 50.0000, 40.0000, 60.0000)
GO
на основе приведенных выше данных, которые я хочу вывести, как показано ниже:
+----------+-------------+---------+-----------+------+
| vertical | accountname | reveune | month | year |
+----------+-------------+---------+-----------+------+
| BFSI | AIG | 13.3333 | December | 2018 |
| BFSI | AIG | 13.3333 | November | 2018 |
| BFSI | AIG | 13.3333 | October | 2018 |
| BFSI | AIG | 16.6666 | August | 2018 |
| BFSI | AIG | 16.6666 | July | 2018 |
| BFSI | AIG | 16.6666 | September | 2018 |
| BFSI | AIG | 20.00 | Feburary | 2019 |
| BFSI | AIG | 20.00 | January | 2019 |
| BFSI | AIG | 20.00 | March | 2019 |
| BFSI | AIG | 33.3333 | April | 2018 |
| BFSI | AIG | 33.3333 | June | 2018 |
| BFSI | AIG | 33.3333 | May | 2018 |
| BFSI | susse | 2.00 | Feburary | 2019 |
| BFSI | susse | 2.00 | January | 2019 |
| BFSI | susse | 2.00 | March | 2019 |
| BFSI | susse | 5.00 | August | 2018 |
| BFSI | susse | 5.00 | July | 2018 |
| BFSI | susse | 5.00 | September | 2018 |
| BFSI | susse | 10.00 | December | 2018 |
| BFSI | susse | 10.00 | November | 2018 |
| BFSI | susse | 10.00 | October | 2018 |
| BFSI | susse | 30.00 | April | 2018 |
| BFSI | susse | 30.00 | June | 2018 |
| BFSI | susse | 30.00 | May | 2018 |
+----------+-------------+---------+-----------+------+
Я пробовал, как показано ниже:
select vertical ,accountname ,[q1]/3 as reveune , 'April' as month ,year(getdate())as year from task
union
select vertical ,accountname ,[q1]/3 revenue ,'May' as month, year(getdate())as year from task
union
select vertical ,accountname ,[q1]/3 as reveune , 'June' as month ,year(getdate())as year from task
union
select vertical ,accountname ,[q2]/3 revenue ,'July' as month, year(getdate())as year from task
union
select vertical ,accountname ,[q2]/3 revenue ,'August' as month, year(getdate())as year from task
union
select vertical ,accountname ,[q2]/3 revenue ,'September' as month, year(getdate())as year from task
union
select vertical ,accountname ,[q3]/3 revenue ,'October' as month, year(getdate())as year from task
union
select vertical ,accountname ,[q3]/3 revenue ,'November' as month, year(getdate())as year from task
union
select vertical ,accountname ,[q3]/3 revenue ,'December' as month, year(getdate())as year from task
union
select vertical ,accountname ,[q4]/3 revenue ,'January' as month,
case when datepart(mm,getdate())=1 then datepart(yyyy,getdate()) else datepart(yyyy,getdate())+1 end year from task
union
select vertical ,accountname ,[q4]/3 revenue ,'Feburary' as month,
case when datepart(mm,getdate())=1 then datepart(yyyy,getdate()) else datepart(yyyy,getdate())+1 end year from task
union
select vertical ,accountname ,[q4]/3 revenue ,'March' as month,
case when datepart(mm,getdate())=1 then datepart(yyyy,getdate()) else datepart(yyyy,getdate())+1 end year from task
запрос выше дает ожидаемыйРезультат. Но это занимает очень много времени. Можете ли вы сказать мне любое альтернативное решение для решения этой задачи в SQL Server