【问题标题】:How to show a specific view from a table in MS-SQL如何在 MS-SQL 中显示表中的特定视图
【发布时间】:2019-03-14 13:25:40
【问题描述】:

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

【问题讨论】:

  • 欢迎来到 Stack Overflow!您应该查看How to create a Minimal, Complete, and Verifiable example 以改进您的问题以及有人可以帮助您的可能性。特别是,如果您发布您迄今为止尝试过的内容,并且其他人可以提供有关如何获得您正在寻找的内容的具体说明,则会更容易。

标签: sql-server sql-server-2016


【解决方案1】:

你可以使用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

【讨论】:

    【解决方案2】:

    自连接到表:

    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)
    

    demo

    【讨论】:

      【解决方案3】:

      如果我正确理解您的问题并且您想从同一结果集中的当前行和后续行获取数据,您可以使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-03
        • 2020-12-22
        • 2019-03-31
        • 2015-12-15
        • 1970-01-01
        相关资源
        最近更新 更多