【问题标题】:Not grouping by date?不按日期分组?
【发布时间】:2010-06-22 14:40:42
【问题描述】:

我有一个存储文档信息(DocID、名称、类型、所有者等)的数据库表。然后我有另一个表来存储文档的下载时间(DocID、DownloadTime 等)。我正在尝试设置一个页面来记录不同类型的文档(政策、表格、出版物等)在特定月份和年份中获得的点击次数(我有一个用户选择的每个下拉列表)。

我还希望能够将月份或年份留空,例如,用户可以获得一年中所有月份的点击次数。当用户选择月份和年份时,下面的查询可以正常工作。但是,当月份或年份为空时,gridview 不会显示分组的文档类型。例如,如果我想查看 2010 年 1 月的点击量,我会得到:

Policies : 210 hits
Forms: 98 hits

但是当用户选择2010年的所有月份时,用户得到:

Policies: 210 hits
Policies: 87 hits
Policies: 23 hits
Policies: 87 hits
Forms 

所以我将所有月份都放在不同的行中,但没有归为一类。查询哪里错了?

SELECT COUNT(Counter.DocID) AS Counter,
       Doc.DocType,
       MONTH(Counter.DownloadDate) AS MonthDownload,
       YEAR(Counter.DownloadDate) AS YearDownload
  FROM Counter
       INNER JOIN Doc ON Counter.DocID = Doc.DocID
 GROUP BY Doc.DocType,
       MONTH(Counter.DownloadDate),
       YEAR(Counter.DownloadDate)
HAVING (MONTH(Counter.DownloadDate) = @Month1 OR @Month1 IS NULL) AND
       (YEAR(Counter.DownloadDate) = @Year1 OR @Year1 IS NULL)

【问题讨论】:

    标签: .net sql-server datetime group-by


    【解决方案1】:

    问题出在您的 GROUP BY 子句中。

    如果您说 GROUP BY DocType, Month, Year 意味着任何时间任何与其他时间不同,分别计算它们

    如果您想要全年的总数,您需要做的是仅按年分组,如果您想要每年每个月的计数,则按月、年分组。 p>

    【讨论】:

      【解决方案2】:

      当您需要年度汇总时,您必须使用不按月份分组的不同查询 - 或者您必须对结果进行后处理以将一年中不同月份的计数相加。

      如所写,您的代码总是按月份和年份分组,当月份发生变化时生成新行 - 如果不破坏 SQL 中的每条规则(好吧,我夸大了 - 很多规则),它就无法做其他事情。

      【讨论】:

        【解决方案3】:

        从查询中删除与月份相关的分组,以获得给定年份中每种文档类型的一个聚合记录。

        SELECT COUNT(Counter.DocID) AS Counter,
               Doc.DocType,
               YEAR(Counter.DownloadDate) AS YearDownload
          FROM Counter
               INNER JOIN Doc ON Counter.DocID = Doc.DocID
         GROUP BY Doc.DocType,
               YEAR(Counter.DownloadDate)
        HAVING 
               (YEAR(Counter.DownloadDate) = @Year1 OR @Year1 IS NULL)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-19
          • 1970-01-01
          • 1970-01-01
          • 2021-06-05
          • 2021-09-30
          • 2012-05-28
          • 2011-12-30
          • 2018-06-11
          相关资源
          最近更新 更多