在SQL Server中将单个列转换为多个列

在SQL Server中将单个列转换为多个列,sql,sql-server,Sql,Sql Server,我在SQLServer中有一列数据,需要将其扩展到多个2列 原始数据如下所示: Col1 ------- Monday Jon Boris Natalie Tuesday James Tom Boris 我希望它看起来像这样: Name | Day -------+--------- Jon | Monday Boris | Monday Natalie| Monday James | Tuesday Tom | Tuesday Boris | Tuesday CREA

我在SQLServer中有一列数据,需要将其扩展到多个2列

原始数据如下所示:

Col1
-------
Monday
Jon
Boris
Natalie
Tuesday
James
Tom
Boris
我希望它看起来像这样:

Name   | Day
-------+---------
Jon    | Monday
Boris  | Monday
Natalie| Monday
James  | Tuesday
Tom    | Tuesday
Boris  | Tuesday
CREATE TABLE Table1 (id int identity(1,1), Col1 NVARCHAR(50))

INSERT INTO Table1 (Col1)
VALUES 
    ('Monday'),('Jon'),('Boris'),('Natalie'),
    ('Tuesday'),('James'),('Tom'),('Boris')
非常感谢。试试这个吧-

查询:

输出:


假设您能够将该标识列添加到源表中进行排序,并且您的表将如下所示:

Name   | Day
-------+---------
Jon    | Monday
Boris  | Monday
Natalie| Monday
James  | Tuesday
Tom    | Tuesday
Boris  | Tuesday
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
你怎么知道乔恩要和星期一等结婚?这是因为他们在表格中列出的方式吗?表中的数据不是天生有序的,您是否有一列将按此顺序保存数据—标识列?是的,它是从文本文件列表导入的。所以每个星期一以下的人都是星期一,每个星期二以下的人都是星期二。假设我按顺序逐行导入数据,我可以创建一个ILSY和一个递增的ID列。就我个人而言,我会创建一个包含一周中天数的第二个表,给它们一个技术键,并将它们与FK链接,而不是在每个记录中重复当天的名称。这当然是我想要的。唯一的问题是,如果我们在不同的日子有不同的人数。因此,如果我们在“星期一”的列表中加上“迈克”,它就会中断。我在想,在这种情况下,我可能需要做一个循环,并计算每个部分的人数。这是一个很好的答案,非常感谢!我设置了一个相当长的例程,涉及变量和while循环。太可怕了!