SQL查询可根据特定一周的星期一至星期日将行分成多行

克里斯汀·弗农

因此,基本上如标题所述,听起来可能令人困惑,但这就是我的表格设置的方式:

+-----------+--------------------------+---------+-----------+------------+-----------------+-------------+---------+
| RecordID  | WeekCommencing |  Name    | Monday  | Tuesday  | Wednesday  | Thursday  | Friday  | Saturday  | Sunday | 

+-----------+--------------------------+---------+-----------+------------+-----------------+-------------+---------+

|         1 | 2020-08-10     | John Doe | WH      | WH       | RW         | WH        | WH      | DO        | DO     |
+-----------+----------------+----------+---------+----------+------------+-----------+---------+-----------+--------+

我想做的就是查询表中的记录,并将每一天分别分隔为相应的日期,“ WeekCommencing”始终为星期一,因此使用上面的表,我要对其进行处理,使其看起来像这样:

+-----------+--------------------------+---------+-----------+-----+
| RecordID  | WeekCommencing |  Name    | Date       | Category  |

+-----------+--------------------------+---------+-----------+------+

|         1 | 2020-08-10     | John Doe | 2020-08-10  | WH      |
+-----------+----------------+----------+---------+----------+------+

|         1 | 2020-08-10     | John Doe | 2020-08-11  | WH      |
+-----------+----------------+----------+---------+----------+------+

|         1 | 2020-08-10     | John Doe | 2020-08-12  | RW      |
+-----------+----------------+----------+---------+----------+------+

|         1 | 2020-08-10     | John Doe | 2020-08-13  | WH      |
+-----------+----------------+----------+---------+----------+------+

|         1 | 2020-08-10     | John Doe | 2020-08-14  | WH      |
+-----------+----------------+----------+---------+----------+------+

|         1 | 2020-08-10     | John Doe | 2020-08-15  | DO      |
+-----------+----------------+----------+---------+----------+------+

|         1 | 2020-08-10     | John Doe | 2020-08-16  | DO      |
+-----------+----------------+----------+---------+----------+------+

因此,您可以看到,周的开始标志着一周的开始,即星期一,因此日期将是星期一,与星期一相关的类别将分配给该日期,然后是11日的星期二,并将分配给该星期二的类别日期,依此类推,直到下一个星期一,然后又重新开始。我将如何做到这一点?

加雷斯

您可以使用CROSS APPLY表值构造函数取消数据透视,例如

DECLARE @DummyData TABLE
(
    RecordID INT,
    WeekCommencing DATE,
    Name VARCHAR(8),
    Monday VARCHAR(2),
    Tuesday VARCHAR(2),
    Wednesday VARCHAR(2),
    Thursday VARCHAR(2),
    Friday VARCHAR(2),
    Saturday VARCHAR(2),
    Sunday VARCHAR(2)
);
INSERT  @DummyData(RecordID, WeekCommencing, Name, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
VALUES
    (1, '20200810', 'John Doe', 'WH', 'WH', 'RW', 'WH', 'WH', 'DO', 'DO');

SELECT  t.RecordID,
        t.WeekCommencing,
        t.Name,
        Date = DATEADD(DAY, upvt.AddDays, t.WeekCommencing),
        upvt.Category
FROM    @DummyData AS t
        CROSS APPLY
        (VALUES 
            (0, t.Monday),
            (1, t.Tuesday),
            (2, t.Wednesday),
            (3, t.Thursday),
            (4, t.Friday),
            (5, t.Saturday),
            (6, t.Sunday)
        ) AS upvt (AddDays, Category);

输出值

RecordID    WeekCommencing  Name        Date        Category
---------------------------------------------------------------
1           2020-08-10      John Doe    2020-08-10  WH
1           2020-08-10      John Doe    2020-08-11  WH
1           2020-08-10      John Doe    2020-08-12  RW
1           2020-08-10      John Doe    2020-08-13  WH
1           2020-08-10      John Doe    2020-08-14  WH
1           2020-08-10      John Doe    2020-08-15  DO
1           2020-08-10      John Doe    2020-08-16  DO

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL:返回一周中的星期一,星期日不工作

一周的sql代码应从星期日的星期一结束开始

按周划分的xts函数将一周的第一天指定为星期日,而不是默认的星期一

SQL Server:如果一周的开始是星期一,那么为什么前一个星期日包含在该周中?

在 Oracle 中将一周的第一天设置为星期日而不是星期一

在Unix上获取星期一和星期日等一周的任何日期作为参数

是否有用于查找一周中某天(星期日、星期一等)的算法?

R将日历日转换为会计周,从星期日算起一周?

SQL设置从星期一到星期日每个月的星期数

如何获取最近4周的星期一和星期日的日期在php中?

如何在bliblidotcom Vue-rangedate-picker中将星期一设置为一周的开始而不是星期日

将一周的开始更改为星期一

将每日数据汇总到SQL中的每周级别:星期二至星期一为一周

根据给定的日期范围获取星期一和星期日

如何将日历的开始日期布局从星期日更改为星期一?

将lubridate功能更改为在星期一而不是星期日开始

在标准 sql 中获取从星期一开始的星期日期

SQL DATEPART(dw,date)需要星期一= 1和星期日= 7

熊猫日期时间将星期日设置为一周的第一天

如何从日期开始到下一个星期日结束的一周

一周的第一天(从星期日开始)

在Unity日历中将星期日设置为一周的第一天

使用 moment.js 如何将 day(0) 设置为本周的星期日而不是前一周

如何通过自动选择正确的日期范围(星期一至星期日)来获取Google表格的小时数

使用Oracle SQL,如何使用其排名(1-7)获得工作日(星期一至星期日)?

我要问的是,我的一周又从星期日开始

Where子句= PostgreSQL中以星期日结束的那一周

在 MongoDB 中从星期日到前一周传递数据

如何在R中获取当前周开始日期(星期一)和结束日期(星期日)