如何将字段转换为 Sql 中的行

How to convert fields to rows in Sql

假设我有一个这样的table:

+------------+-----------+--+--+--+
| First name | Last name |  |  |  |
+------------+-----------+--+--+--+
| First 1    | Last 1    |  |  |  |
+------------+-----------+--+--+--+
| First 2    | Last 2    |  |  |  |
+------------+-----------+--+--+--+
| First 3    | Last 3    |  |  |  |
+------------+-----------+--+--+--+

我如何创建一个查询来显示这样的数据

+---------+--+--+--+--+
| Name    |  |  |  |  |
+---------+--+--+--+--+
| First 1 |  |  |  |  |
+---------+--+--+--+--+
| Last 1  |  |  |  |  |
+---------+--+--+--+--+
| First 2 |  |  |  |  |
+---------+--+--+--+--+
| Last 2  |  |  |  |  |
+---------+--+--+--+--+
| First 3 |  |  |  |  |
+---------+--+--+--+--+
| Last 3  |  |  |  |  |
+---------+--+--+--+--+

假设每隔一列重复一次,并且最初没有 ID 列

WITH T (FirstName, LastName,Ranking)
AS
(
 SELECT 
   FirstName, 
   LastName, 
   2* ROW_NUMBER() OVER(ORDER First Name, Last Name) AS Ranking --, other columns
 FROM TBL
)

SELECT Name  --, other columns
FROM
(
SELECT FirstName AS Name,
Ranking-1 as r--, other columns
FROM T

UNION

SELECT LastName AS Name,
Ranking as r--, other columns
FROM T
) Tbl ORDER BY r ASC
with fnames as
(
 select fname Name, ROW_NUMBER() over (order by fname,lname) rank from myTable
), lnames as
(
 select lname Name, 0.5 + ROW_NUMBER() over (order by fname,lname) rank from myTable
),
merged as 
(
 (select * from fnames) union (select * from lnames)
)
select Name from merged order by rank