如何将字段转换为 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
假设我有一个这样的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