一列为两列

时间:2015-03-04 12:52:48

标签: sql

我有一个表,它会在一列中显示用户ID。我想将该列显示为两列

例如:

  • 在第一行中,第1列中的第一个用户ID和第2列中的第二个用户ID
  • 在第二行中,第1列中的第二个用户ID和第2列中的第三个用户ID
  • 在第三行中,第1列中的第三个用户ID和第2列中的第四个用户ID

等等。

3 个答案:

答案 0 :(得分:0)

SQL表表示无序集。没有"第一个用户ID","第二个用户ID"等等,除非你有一个指定排序的列。

您可以使用ANSI标准lead()功能执行所需操作。你还没有指定你正在使用的数据库,所以这似乎是最好的答案:

select userid, lead(userid order by rownumber) as next_userid
from (<subquery>) s;

答案 1 :(得分:0)

您可以使用row_number创建一个订单列并使用它来将表连接到自身,请参阅此示例( MS-SQL ):

declare @Users as table
(
 Id int not null
,Name varchar(20) not null
)

insert into @Users
values
 (10, 'First')
,(220,'Second')
,(301,'Third')
,(999,'Last')

declare @Temp table
(
 Id int not null
,Name varchar(20) not null
,[Order] int not null
)

insert into @Temp
select us.Id, us.Name, ROW_NUMBER() OVER(order by us.Id) as [Order]
from @Users us

select *
 from @Temp t0
 join @Temp t1 on t1.[Order] = t0.[Order] + 1

答案 2 :(得分:0)

试试这个解决方案。它适用于PostgreSQL:

SELECT firstTable.id as firstid, MIN(nextTable.id) as nextid 
FROM [your_table_name] as firstTable 
LEFT JOIN [your_table_name] as nextTable 
ON firstTable.id < nextTable.id  
GROUP BY firstid
ORDER BY firstid ASC