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 

您需要使用 UNIONUNION 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 将包含它们。如果在单个源行的 code1code2 中具有相同的值,则 UNION 将生成单个输出行,而 UNION ALL 将生成两个相同的输出行。从你的问题中不清楚你想要哪种行为。

您只需对源 table 进行 一次扫描 即可完成此操作。使用 CROSS APPLY (VALUES

简单地反转
SELECT
  t.id,
  t.Name,
  v.code
FROM YourTable t
CROSS APPLY (VALUES
    (code1),
    (code2)
) v(code)