我正在处理一个应用程序而且卡住了;我需要以一种方式查询,即我可以根据年份从访问数据库中获取数据。
Ex:我有一行,其中startdate是1-09-2016,enddate是2-6-2017。我希望在开始日期和结束日期之间获得月份数
像:
2016年9,10,11,12
和1,2 ....,2017年为6
有没有办法做到这一点?
我正在使用数据透视表来获取月号,但它显示错误的结果,因为它只包含Jan到Dec字段。
如果日期是明年那么它会显示错误的结果
例如:2016年11月22日至2017年2月2日
预期结果是
11(新手)
2016年12月12日(12月)
和2017年的1,2
这是我的查询
TRANSFORM iif(IsNull(COUNT(monthTable.monthNumber))," N / A",FIRST(Resource_Allocation。[Chargebility]))
SELECT Resource_Allocation。[Employee ID],Resource_Allocation。[Actual Roll-On Date],Resource_Allocation。[Estimated Roll-Off Date]
FROM Resource_Allocation,monthTable
WHERE monthTable.monthNumber月份([Resource_Allocation]![实际滚动日期])和月份([Resource_Allocation]![估计滚降日期])
GROUP BY Resource_Allocation。[员工ID],Resource_Allocation。[实际滚动日期],Resource_Allocation。[估计滚降日期]
PIVOT monthTable.monthName IN(1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月);
答案 0 :(得分:0)
以下是如何对样本数据执行此操作的示例:
DECLARE @Start DATETIME,
@End DATETIME;
SELECT @Start = '2016-09-01'
,@End = '2017-06-02';
SELECT MONTH(DATEADD(MONTH, a.number, @Start)) as MonthNumber
FROM master.dbo.spt_values a
WHERE a.type = 'P'
AND a.number <= DATEDIFF(MONTH, @Start, @End);
如果您需要更多帮助,请提供有关实际表/列名称的更多数据。
答案 1 :(得分:0)
如果你想在MS Access中解决这个问题,这是一个快速而肮脏的方法。 创建一个包含两列的表tblMonth,YearNr和MonthNr(数字)。 输入所有必需的数据(2016年1月,2016年2等)。 接下来,运行此查询(查询将要求您输入startdate并将enddate作为您的日期范围):
PARAMETERS StartDate date, EndDate Date;
SELECT tblMonth.YearNr, tblMonth.MonthNr
FROM tblMonth
WHERE YearNr & Format(MonthNr, '00')>= Year(StartDate) & Format(Month(StartDate),'00')
AND YearNr & Format(MonthNr,'00') <= Year(EndDate) & Format(Month(EndDate),'00')