【问题标题】:SQL combine weekend dates to one totalSQL 将周末日期合并为一个总数
【发布时间】:2018-11-23 17:22:27
【问题描述】:

我正在尝试使用 datename 组合周末日期。

表格

  • 日期
  • 2018 年 11 月 25 日
  • 2018 年 11 月 24 日
  • 2018 年 11 月 25 日

所以我使用 DATENAME 并将日期转换为星期几。

  • 日期
  • 星期日
  • 星期六
  • 星期日

然后我可以数他们,让它看起来像这样

  • 日期。计数
  • 星期天。 2
  • 星期六。 1

但我不确定如何将这些分组,所以看起来像

  • 日期。计数
  • 周末。 3

【问题讨论】:

  • 最好进行选择,在其中收集 DATE=='Sunday' 或 DATE=='Saturday' 的所有日期,然后将其相加并将其输出为带有一个条目的表格跨度>
  • 您可以使用选择查询来选择您拥有的内容作为内部查询以获取结果。

标签: sql sql-server database


【解决方案1】:

您可以通过以下几种方式做到这一点。你会注意到COUNT 版本你必须返回NULL,所以COUNT() 函数不会计算它。您也可以使用SUM()。还有其他方法可以做到这一点。

DECLARE @x TABLE (mydate DATE);

INSERT INTO @x SELECT '11-25-2018'; --Sunday
INSERT INTO @x SELECT '11-24-2018'; --Saturday
INSERT INTO @x SELECT '11-25-2018'; --Sunday
INSERT INTO @x SELECT '11-23-2018'; --Friday

SELECT count(CASE WHEN DATEPART(dw, mydate) BETWEEN 2 and 6 THEN NULL ELSE 1 END ) AS CountOfWeekendDays
    ,sum(CASE WHEN DATEPART(dw, mydate) BETWEEN 2 and 6 THEN 1 ELSE 0 END) AS SumOfWeekDays
    ,sum(CASE WHEN DATEPART(dw, mydate) BETWEEN 2 and 6 THEN 0 ELSE 1 END) AS SumOfWeekendDays
FROM @x

【讨论】:

  • 我们有什么SET DATEFIRST 1 -- MONDAY?然后必须将 2 和 6 更改为 6 和 7。
【解决方案2】:

您可以按日期名称(工作日,)进行分组,以获得必要的输出。

create table t(date_of_hire date);

insert into t values('2018-11-25');
insert into t values('2018-11-24');
insert into t values('2018-11-25');

select datename(weekday,date_of_hire) as day_of_week,count(*) as cnt
  from t
  group by datename(weekday,date_of_hire)

【讨论】:

    【解决方案3】:

    获取周末总天数

    SELECT COUNT(*) as totalweekdays FROM tablename 
    WHERE 
    DATENAME(weekday, datecolumn) = 'Saturday'   
    OR
    DATENAME(weekday, datecolumn) = 'Sunday'   
    

    【讨论】:

      猜你喜欢
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多