SQL 服务器在同一个 table 上将多列合并为 1 列
SQL Server combine multiple column into 1 column on the same table
我有一个这样的例子 table :
id | Name | code1 | code2
------------------------------
1 | John | 001 | AC2
2 | Anna | 002 | AH5
3 | Brad | 003 | BB1
我想将列 code1 和 code2(以及另一列,如果有的话)合并到 1 列中,并在 table 中的另一列上复制数据,所以它会得到这样的结果:
id | Name | code
-------------------
1 | John | 001
1 | John | AC2
2 | Anna | 002
2 | Anna | AH5
3 | Brad | 003
3 | Brad | BB1
您需要使用 UNION
或 UNION ALL
:
SELECT
id,
Name,
code1 As code
FROM
YourTable
UNION
SELECT
id,
Name,
code2 As code
FROM
YourTable
ORDER BY
id,
Name,
code
UNION (Transact-SQL) - SQL Server | Microsoft Docs
注意: 根据 Aaron 下面的评论,UNION
将删除重复的行,而 UNION ALL
将包含它们。如果在单个源行的 code1
和 code2
中具有相同的值,则 UNION
将生成单个输出行,而 UNION ALL
将生成两个相同的输出行。从你的问题中不清楚你想要哪种行为。
您只需对源 table 进行 一次扫描 即可完成此操作。使用 CROSS APPLY (VALUES
简单地反转
SELECT
t.id,
t.Name,
v.code
FROM YourTable t
CROSS APPLY (VALUES
(code1),
(code2)
) v(code)
我有一个这样的例子 table :
id | Name | code1 | code2
------------------------------
1 | John | 001 | AC2
2 | Anna | 002 | AH5
3 | Brad | 003 | BB1
我想将列 code1 和 code2(以及另一列,如果有的话)合并到 1 列中,并在 table 中的另一列上复制数据,所以它会得到这样的结果:
id | Name | code
-------------------
1 | John | 001
1 | John | AC2
2 | Anna | 002
2 | Anna | AH5
3 | Brad | 003
3 | Brad | BB1
您需要使用 UNION
或 UNION ALL
:
SELECT
id,
Name,
code1 As code
FROM
YourTable
UNION
SELECT
id,
Name,
code2 As code
FROM
YourTable
ORDER BY
id,
Name,
code
UNION (Transact-SQL) - SQL Server | Microsoft Docs
注意: 根据 Aaron 下面的评论,UNION
将删除重复的行,而 UNION ALL
将包含它们。如果在单个源行的 code1
和 code2
中具有相同的值,则 UNION
将生成单个输出行,而 UNION ALL
将生成两个相同的输出行。从你的问题中不清楚你想要哪种行为。
您只需对源 table 进行 一次扫描 即可完成此操作。使用 CROSS APPLY (VALUES
SELECT
t.id,
t.Name,
v.code
FROM YourTable t
CROSS APPLY (VALUES
(code1),
(code2)
) v(code)