假設你將能夠在該標識列添加到源代碼訂餐桌,你的桌子會看起來有些東西納克這樣的:
CREATE TABLE Table1 (id int identity(1,1), Col1 NVARCHAR(50))
INSERT INTO Table1 (Col1)
VALUES
('Monday'),('Jon'),('Boris'),('Natalie'),
('Tuesday'),('James'),('Tom'),('Boris')
你可以嘗試以下方法:
- 首先創建一個臨時表平日這樣你就可以區分它們 (也可以用其他方式來完成)
- 加入天(t.ID> d1.ID)
- 防止那些應該在第二天進入ID(t.ID < MIN(d2.Id))
- 合併只是爲了確保它在列表中的最後一天有效。
。
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)
你怎麼知道'Jon'被綁定到'Monday'等等?這是由於他們在表格中列出的方式嗎?表中的數據並非固有排序,您是否有一列將按照此順序保存數據 - 一個標識列? – Taryn
是的,它從文本文件列表中導入。所以週一下的每個人都是星期一,週二下的每個人都是星期二。假設我按順序逐行導入數據,我可以使用一個增量的ID列。 – pugu
就我個人而言,我會創建第二張表,並在每週的日子裏給他們一個技術密鑰,並將他們與FK鏈接起來,而不是在每個記錄中重複一天的名字。 –