我有一个包含两列的表。我需要使用Oracle查询按顺序将两列的内容检索到一个列中。
FirstName LastName
Naveen Bharadwaj
Usain Bolt
我想将记录检索到一个列中,以便第一个名称和姓氏按顺序排列。
Name
Naveen
Bharadwaj
Usain
Bolt
P.S:我不能使用decode()函数
答案 0 :(得分:1)
将此查询用于所需结果
SELECT Name FROM TableName UNPIVOT (Name FOR NAME IN (FirstName,LastName));
希望这有帮助!
答案 1 :(得分:0)
要将记录放入单个列,您可以使用the UNION ALL operator。
如果您希望它们保持在表中的顺序,您可以按ID或主键列进行排序。我假设你有一个,因为你需要知道原始订单是什么,以便保留它。
所以,像这样:
SELECT fullname
FROM (
SELECT 1 AS name_type,
name_id,
firstname AS fullname
FROM yourtable
UNION ALL
SELECT
2,
name_id,
lastname
FROM yourtable
) sub
ORDER BY sub.name_id, sub.name_type;
name_type表示1表示名字,2表示姓氏,用于排序并将名字保留在姓氏之上。 使用子查询是因为您只想显示名称,而是按其他列排序。
我建议使用UNION ALL而不是UNION,因为您可能需要保留重复项,因此性能可能会更好。