我有一个表,它会在一列中显示用户ID。我想将该列显示为两列
例如:
等等。
答案 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