#sql #reporting-services
#sql #службы отчетов
Вопрос:
Хотел бы рассчитать год до даты и предыдущий год до даты текущего месяца в представлении sql, чтобы просто представить данные в ssrs, чтобы ускорить его работу. Есть ли способ написать представление, которое может это выполнить?
Ответ №1:
Игнорируя тот факт, что я думаю, что у вас есть некоторые ошибки в ваших предыдущих сводных числах с начала года..
Я воссоздал данные в соответствии с вашим примером
CREATE TABLE #t (TransDate date, Customer varchar(30), Amount float)
INSERT INTO #t VALUES
('2020-09-21', 'Customer 1', 200),
('2020-09-22', 'Customer 2', 300),
('2020-08-03', 'Customer 2', 450),
('2020-08-04', 'Customer 1', 1200),
('2019-09-14', 'Customer 1', 859),
('2019-02-05', 'Customer 2', 230),
('2019-07-26', 'Customer 2', 910),
('2019-11-17', 'Customer 1', 820)
Затем следующий оператор выдаст то, что вам нужно. Это НЕ самый элегантный способ сделать это, но он легко преобразуется в представление, и это все, что я мог придумать за то время, которое у меня было.
SELECT
m.Customer
, m.MTD as [Current Month]
, y.YTD as [Current YTD]
, p.YTD as [Previous YTD]
FROM (
SELECT Customer, Yr = Year(TransDate), Mn = MONTH(TransDate), MTD = SUM(Amount) FROM #t t WHERE MONTH(TransDate) = MONTH(GetDate()) and YEAR(TransDate) = YEAR(GetDate())
GROUP by Customer, YEAR(TransDate), MONTH(TransDate)
) m
JOIN (SELECT Customer, Yr = YEAR(TransDate), YTD = SUM(Amount) FROM #t t GROUP by Customer, YEAR(TransDate)) y on m.Customer =y.Customer and m.Yr = y.Yr
JOIN (SELECT Customer, Yr = YEAR(TransDate), YTD = SUM(Amount) FROM #t t GROUP by Customer, YEAR(TransDate)) p on y.Customer =p.Customer and y.Yr = p.Yr 1
Это дает следующие результаты (которые не соответствуют вашему примеру, но я думаю, что ваш образец неверен)