我是数据库概念的新手。因此,我需要一些帮助来解决特定的问题。
假设我有一个名为emp的表,其数据如下:
id | dept | doj
100 | FS | 02-04-13
100 | HST | 02-04-14
100 | ETA | 02-04-15
我要显示的是:
id | from | to | doj
100 | FS | HST | 02-04-14
100 | HST | ETA | 02-04-15
任何帮助将不胜感激。谢谢。 我正在使用的数据库是MS-SQL服务器13v。
答案 0 :(得分:0)
您可以使用apply
:
select t.id, t.dept as [from], t1.dept as [to], t1.doj
from table t cross apply
(select top (1) t1.*
from table t1
where t1.id = t.id and t1.doj > t.doj
order by t1.doj
) t1
答案 1 :(得分:0)
如果我正确理解了您的问题,并且希望从同一结果集中的当前行和后续行中获取数据,则可以使用LEAD()函数:
输入:
CREATE TABLE #Table (
id int,
dept varchar(10),
doj date
)
INSERT INTO #Table
(id, dept, doj)
VALUES
(100, 'FS', '2013-04-02'),
(100, 'HST', '2014-04-02'),
(100, 'ETA', '2015-04-02'),
(101, 'XTA', '2015-04-02'),
(101, 'YTA', '2015-04-02')
声明:
SELECT *
FROM
(
SELECT
id,
dept [from],
LEAD(dept) OVER (PARTITION BY id ORDER BY id, doj) AS [to],
LEAD(doj) OVER (PARTITION BY id ORDER BY id, doj) AS [doj]
FROM #Table
) t
WHERE t.[to] IS NOT NULL
输出:
id from to doj
100 FS HST 2014-04-02
100 HST ETA 2015-04-02
101 XTA YTA 2015-04-02
答案 2 :(得分:0)