假设您将能够将该标识列添加到源表以进行排序,并且您的表将如下所示:
CREATE TABLE Table1 (id int identity(1,1), Col1 NVARCHAR(50))
INSERT INTO Table1 (Col1)
VALUES
('Monday'),('Jon'),('Boris'),('Natalie'),
('Tuesday'),('James'),('Tom'),('Boris')
您可以尝试以下方法:
- 首先为工作日创建一个临时表,以便您可以区分它们(也可以通过其他方式完成)
- 加入几天前的原始表以寻找更大的 ID (t.ID > d1.ID)
- 防止那些应该在第二天进入的 ID (t.ID < MIN(d2.Id))
- Coalesce 只是为了确保它在列表中的最后一天有效。
.
CREATE TABLE #weekDays (wd NVARCHAR(10));
INSERT INTO #weekDays
VALUES
('Monday'), ('Tuesday'), ('Wednesday'),
('Thursday'), ('Friday'), ('Saturday'), ('Sunday');
WITH CTE_Days AS
(
SELECT t.*
FROM Table1 t
INNER JOIN #weekDays wd ON wd.wd = t.col1
)
SELECT *
FROM CTE_Days d1
INNER JOIN Table1 t ON t.id > d1.id AND t.id <
COALESCE((
SELECT MIN(d2.id)
FROM CTE_Days d2
WHERE d2.id > d1.id
), t.id + 1)