創建並填充Calendar Table(它使日期工作更容易)。
create table Calendar
(
id int primary key identity,
[date] datetime,
[day] as datepart(day, [date]) persisted,
[month] as datepart(month, [date]) persisted,
[year] as datepart(year, [date]) persisted,
day_of_year as datepart(dayofyear, [date]) persisted,
[week] as datepart(week, [date]),
day_name as datename(dw, [date]),
is_weekend as case when datepart(dw, [date]) = 7 or datepart(dw, [date]) = 1 then 1 else 0 end,
[quarter] as datepart(quarter, [date]) persisted
--etc...
)
--populate the calendar
declare @date datetime
set @date = '1-1-2000'
while @date <= '12-31-2100'
begin
insert Calendar select @date
set @date = dateadd(day, 1, @date)
end
然後,創建一個FiscalYear
觀點:
create view FiscalYear
as
select
id,
case when month = 11 or month = 12 then year + 1 else year end as [year]
from Calendar
所以,當你需要一個給定日期的財年中,只使用類似下面的查詢:
select C.*, FY.year fiscal_year from Calendar C inner join FiscalYear FY on FY.id = C.id
中當然,因爲會計年度只是一個列的計算,您也可以將其作爲日曆表本身的一部分。然後,它只是:
select * from Calendar
製作一個包含會計期間的表格。加入並比較日期。然後,您可以在查詢中隨時使用財務週期表。 –
Aside:好奇的是,你的'case'表達式除了'month(a.InvoiceDate)'以外的所有內容都使用字符串值。根據[數據類型優先順序](https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-precedence-transact-sql),每個'when'值將被轉換比較之前爲整數。 'then'值將保持字符串。提示:使用合適的軟件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服務器2014'。請注意,'tsql'縮小了選擇範圍,但不指定數據庫。 – HABO