根据年份

时间:2016-07-13 06:41:26

标签: .net database ms-access pivot pivot-table

我正在处理一个应用程序而且卡住了;我需要以一种方式查询,即我可以根据年份从访问数据库中获取数据。

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月);

2 个答案:

答案 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')