gpt4 book ai didi

sql - 在 SQL Server 中将单列转换为多列

转载 作者:行者123 更新时间:2023-12-01 10:52:34 25 4
gpt4 key购买 nike

我在 SQL Server 中只有一列数据,需要将其扩展为多 (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')

您可以尝试以下方法:

  • 首先为工作日创建一个临时表,以便区分它们(也可以通过其他方式完成)
  • 加入几天前的原始表以查找更大的 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)

关于sql - 在 SQL Server 中将单列转换为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17232760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com