如何从MS-SQL中的表显示特定视图

时间:2019-03-14 13:25:41

标签: sql-server sql-server-2016

我是数据库概念的新手。因此,我需要一些帮助来解决特定的问题。 假设我有一个名为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。

3 个答案:

答案 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)

通过自联接到表:

void OrganOut() 
{       
    Title(__func__);
}

请参见demo