rach_303 Ответов: 1

Sql за финансовый год - помощь?


У меня есть следующий SQL. Он дает результаты за календарный год. Мне это нужно, чтобы дать результаты за финансовый год (июль-июнь). У меня есть только одно поле "SQL-выражение", в которое я могу вставить код, поэтому должен быть запущенный код, если это имеет смысл?

Литой(сумма(случай, когда функция datediff(гггг,getdate (), то[vBoGiftsReceived].[GiftDate]) = 0, то [vBoGiftsReceived].[GiftAmount] ELSE 0 END) как десятичное число(10, 2))

Спасибо!!

Что я уже пробовал:

Я думаю, что мне нужно что-то сделать с getdate, но понятия не имею, что именно!

Herman<T>.Instance

SQL-инъекция. Всегда нет идти!
В чем конкретно заключается ваша проблема? Не могу заглянуть тебе в голову

rach_303

Спасибо за ваш ответ. Извините, я только новичок и теперь уверен в протоколах.

В нашей базе данных мы используем запросы, но все это делается через Мастер-конструктор, так что никакого фактического кодирования нет. Однако для этого конкретного запроса SQL был введен в пользовательское поле "выражение SQL", которое я вставил выше.

Запрос просматривает GiftDate в таблице vBoGiftsReceived и с помощью текущей системной даты (getdate) суммирует подарки, датированные в течение текущего календарного года. Это повторяется с использованием -1 -2 и т. д., Чтобы посмотреть на предыдущие календарные годы.

Я хотел бы знать, есть ли способ изменить этот SQL для суммирования подарков, полученных за финансовый год, на основе даты подарка и текущей даты. Финансовый год будет июль-июнь.

Спасибо!

CHill60

Ладно, я сдаюсь. Где находится SQL-инъекция в коде?

Herman<T>.Instance

"У меня есть только одно поле" SQL-выражение", в которое я могу вставить код".....

rach_303

Извините, я действительно не знаю, что это значит?!

CHill60

sql-инъекция - это место, где пользовательский ввод может быть использован для злонамеренного изменения базы данных- см. SQL-инъекция - OWASP[^]
Я не согласен с дигиманом - я думаю, что они неправильно поняли ваш смысл.

rach_303

Ах да, определенно недоразумение! Так что я нашел и это. Я предполагаю, что это весь код для этого запроса. Разве это делает его более ясным? Я понятия не имею, как использовать то, что вы предложили ниже.

SELECT CAST(SUM(CASE WHEN datediff(yyyy,getdate(),[vBoGiftsReceived].[GiftDate]) = 0 THEN [vBoGiftsReceived].[GiftAmount] ELSE 0 END) AS DECIMAL(10, 2)) AS [2018], CAST(SUM(CASE WHEN datediff(yyyy,getdate(),[vBoGiftsReceived].[GiftDate]) = -1 THEN [vBoGiftsReceived].[GiftAmount] ELSE 0 END) AS DECIMAL(10, 2)) AS [2017], CAST(SUM(CASE WHEN datediff(yyyy,getdate(),[vBoGiftsReceived].[GiftDate]) = -2 THEN [vBoGiftsReceived].[GiftAmount] ELSE 0 END) AS DECIMAL(10, 2)) AS [2016], CAST(SUM(CASE WHEN datediff(yyyy,getdate(),[vBoGiftsReceived].[GiftDate]) = -3 THEN [vBoGiftsReceived].[GiftAmount] ELSE 0 END) AS DECIMAL(10, 2)) AS [2015], CAST(SUM(CASE WHEN datediff(yyyy,getdate(),[vBoGiftsReceived].[GiftDate]) = -4 THEN [vBoGiftsReceived].[GiftAmount] ELSE 0 END) AS DECIMAL(10, 2)) AS [2014] FROM vBoGiftsReceived WHERE ((abs(datediff(yyyy,getdate(),[vBoGiftsReceived].[GiftDate])) <= 5) AND [vBoGiftsReceived].[PartyId] = '88590bf7-a0e4-4582-8b19-73c9a396a4ec')

1 Ответов

Рейтинг:
0

CHill60

Во всем мире нет стандартного подхода, но это, по - видимому, возвращает австралийский финансовый год (оговорка- непроверенная мной)

select DATEADD(dd,0, DATEDIFF(dd,0, DATEADD( mm,
 -(((12 + DATEPART(m, getDate())) - 7)%12), getDate() ) 
 - datePart(d,DATEADD( mm, -(((12 + DATEPART(m, getDate())) - 7)%12),getDate() ))+1 ) )
кредит: Mouli @ accounting - расчет финансового года в SQL Server[^]