С такой проблемой, как это, первое, что вам нужно сделать, это понять, как вычислить " конец этого месяца »и« конец этого года ». Используя sql2008, у вас нет доступа к полезной функции EOMONTH()
, поэтому вы должны рассчитать это самостоятельно.
Есть a few different ways of doing this, но я пошел за тем, который рассчитает несколько миллисекунд до полуночи в последний день текущего месяца и в последний день текущего года.
declare @date DATETIME = getdate()
select dateadd(millisecond,-3,DATEADD(MONTH,datediff(MONTH,0,@date)+1,0)) as EOMONTH
select dateadd(millisecond,-3,DATEADD(year,datediff(year,0,@date)+1,0)) as EOYEAR
(. Примечание: -3
связанно с типом dattime
данных SQL-сервером, имеющим minimum accuracy of 3ms поэтому принимать 3 мс с начала следующего месяца/следующий годом настолько точно, как вы собираетесь получить в любом дело это имеет очень мало все, что мы пытаемся сделать, это получить дату границы как можно ближе к концу месяца/конец года, как это возможно)
Учитывая этот бит работал, вы могли бы использовать их по отдельности в двух разных запросах
DECLARE @now DATETIME = GETDATE();
DECLARE @eomonth DATETIME = dateadd(millisecond,-3,DATEADD(MONTH,datediff(MONTH,0,@date)+1,0))
DECLARE @eoyear DATETIME = dateadd(millisecond,-3,DATEADD(year,datediff(year,0,@date)+1,0))
SELECT SUM(amt) FROM Budget
WHERE date >= @now AND date <[email protected]
SELECT SUM(amt) FROM Budget
WHERE date >= @now AND date <= @eoyear
Или, вы можете объединить их
SELECT SUM(CASE WHEN DATE<@eomonth THEN Amt ELSE 0 END) AS summonth,
SUM(CASE WHEN DATE<@eoyear THEN Amt ELSE 0 END) AS sumyear
FROM Budget
WHERE Date>[email protected]
Пробовали ли вы что-нибудь? Посмотрите на Group By и Datepart. –
, какую версию сервера sql вы используете? – pedram
@rajeshmpanchal sql server 2008 – user3548593