Как показать конкретный вид из таблицы в MS-SQL - PullRequest
0 голосов
/ 14 марта 2019

Я новичок в понятиях базы данных.Итак, мне нужна помощь в решении конкретной проблемы.Скажем, у меня есть таблица с именем 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 server 13v.

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

Если я правильно понимаю ваш вопрос и вы хотите получить данные из текущей и последующей строк в одном наборе результатов, вы можете использовать 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
0 голосов
/ 14 марта 2019

При самостоятельном присоединении к таблице:

select t.id, tt.dept [from], t.dept [to], t.doj
from tablename t inner join tablename tt
on tt.id = t.id and
tt.doj = (select max(doj) from tablename where id = t.id and doj < t.doj)

См. Демоверсию

0 голосов
/ 14 марта 2019

Вы можете использовать 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
...