Spi*_*der 4 sql excel ms-access financial
我有一个包含年、月、日期、项目和收入列的表格。每个条目都会在每月的第一天添加。
我必须能够获得每个财政年度特定项目的总收入。到目前为止我所得到的(我认为每年都有效?)是这样的:
SELECT year, SUM(TotalIncome)
FROM myTable
WHERE ((date Between #1/1/2007# And #31/12/2015#) AND (project='aproject'))
GROUP BY year;
Run Code Online (Sandbox Code Playgroud)
本质上,我不想按年份对数据进行分组,而是想按财政年度对结果进行分组。我用过DatePart('yyyy', date),结果是一样的。
我将运行从 Excel 到数据库的查询。我需要能够选择年数(例如2009年至2014年,或2008年至2010年等)。我将从 Excel 中的用户输入中获取年份(获取两个日期,即 startYear、endYear)。
当前查询的结果给我,每年都是同年 1 月 1 日到 12 月 31 日的数据:
Year | Income
2009 | $123.12
2010 | $321.42
2011 | $231.31
2012 | $426.37
Run Code Online (Sandbox Code Playgroud)
我希望结果看起来像这样,其中每个财政年度为 7 月 1 日至次年 6 月 30日:
FinancialYear | Income
2009-10 | $123.12
2010-11 | $321.42
2011-12 | $231.31
2012-13 | $426.37
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我也希望能够每个季度完成一次。
另外,如果重要的话,我具有只读访问权限,因此我无法对数据库进行任何修改。
这尚未经过测试,但逻辑与 SQL 查询的答案相同,用于检索按年份分组的财务年度数据。
SELECT fy.FinancialYear, SUM(fy.TotalIncome)
FROM
(
SELECT
IIF( MONTH(date) >= 7,
YEAR(date) & "-" & YEAR(date)+1,
YEAR(date)-1 & "-" & YEAR(date) ) AS FinancialYear,
TotalIncome
FROM myTable
WHERE date BETWEEN #1/1/2007# AND #31/12/2015#
AND project = 'aproject'
) AS fy
GROUP BY fy.FinancialYear;
Run Code Online (Sandbox Code Playgroud)
进一步扩展,您还可以每季度获得:
SELECT fy.FinancialQuarter, SUM(fy.TotalIncome)
FROM
(
SELECT
IIF( MONTH(date) >= 10,
"Q2-" & YEAR(date) & "-" & YEAR(date)+1,
IIF( MONTH(date) >= 7,
"Q1-" & YEAR(date) & "-" & YEAR(date)+1,
IIF( MONTH(date) >= 4,
"Q4-" & YEAR(date)-1 & "-" & YEAR(date),
"Q3-" & YEAR(date)-1 & "-" & YEAR(date)
)
)
) AS FinancialQuarter,
TotalIncome
FROM myTable
WHERE date BETWEEN #1/1/2007# AND #31/12/2015#
AND project = 'aproject'
) AS fy
GROUP BY fy.FinancialQuarter;
Run Code Online (Sandbox Code Playgroud)