0

我有一个日历表:

CREATE TABLE [dbo].[FIN_CalendarTable](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [date] [datetime] NOT NULL,
    [fiscalStart] [datetime] NULL,
    [fiscalEnd] [datetime] NULL,
    [isHoliday] [int] NOT NULL,
    [isWorkday] [int] NOT NULL
 CONSTRAINT [PK_FIN_CalendarTable] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

我想计算财政年度每周的工作日数量。我有以下查询,它返回会计周和会计期间的每个工作日(250 条记录):

    SELECT  dbo.CalendarTable.fiscalStart
      , dbo.CalendarTable.fiscalEnd
      , COUNT(*)
      , dbo.CalendarTable.monthOfYearName
      , dbo.CalendarTable.monthStart
      , dbo.CalendarTable.monthEnd
      , DATEDIFF(DAY, dbo.CalendarTable.fiscalStart, [date]) / 7 + 1 WeekOfFiscalYear
FROM    dbo.CalendarTable
WHERE   dbo.CalendarTable.isHoliday=0
          AND dbo.CalendarTable.isWorkday=1
        AND ( dbo.CalendarTable.date  >= CONVERT(DATETIME,'01/07/2012',103)
              AND dbo.CalendarTable.date <= CONVERT(DATETIME,'30/06/2013',103) ) 
GROUP BY dbo.CalendarTable.fiscalStart
      , dbo.CalendarTable.fiscalEnd
      , dbo.CalendarTable.monthOfYearName
      , dbo.CalendarTable.monthStart
      , dbo.CalendarTable.monthEnd
      , [dbo].[CalendarTable].[date]

我意识到这是因为 group by 包含 [dbo].[CalendarTable].[date] 列。是否有更好的方法来构建此查询,以便在每个会计周中返回 52 条(或适当时为 53 条)记录以及总计工作日?

我可能可以在应用程序中实现聚合,但如果可能的话,我希望获得一组更好的结果。

4

2 回答 2

0

是否有更好的方法来构建此查询,以便在每个会计周中返回 52 条(或适当时为 53 条)记录以及总计工作日?

尚不完全清楚您所说的工作日是什么意思,但是如果您指的是工作日,那么我认为您需要这些方面的东西。

SELECT fiscalStart
     , fiscalEnd
     , sum(isWorkday)
FROM dbo.CalendarTable
WHERE date >= CONVERT(DATETIME,'01/07/2012',103)
  AND date <= CONVERT(DATETIME,'30/06/2013',103)
GROUP BY fiscalStart
       , fiscalEnd
ORDER BY fiscalStart

这假定对于每个日期,“fiscalStart”表示会计周的第一天,“fiscalEnd”表示会计周的最后一天。如果这不是这些列的意思,请编辑您的问题,粘贴几周的 INSERT 语句以及预期的输出。

于 2013-06-19T13:59:21.027 回答
0

我宁愿尝试创建一个 UDF,它可以为我提供工作日数或总周数,而不是尝试从查询本身获取此信息。您仅在 GROUP BY 语句中拥有所有这些列,因此您可以计算记录数,并且您可以使用 UDF 简化查询。

这是一篇文章,展示了如何计算工作日中两个日期之间的差异。 如何计算工作日中两个日期之间的差异

于 2013-06-18T12:44:05.563 回答