【问题标题】:querying information from next row从下一行查询信息
【发布时间】:2019-10-01 01:19:30
【问题描述】:

我创建了这个 SQL,但不知道如何查询下一行。我们使用 SQL 2008,所以不能使用滞后/领先

SELECT P_MTN AS MTN
  ,P_DATE AS DATE
  ,CONVERT(VARCHAR(50), SEQU) AS NUM
  ,item_id + '  ||  ' + CONVERT(VARCHAR(50), PRODUCTION_ID) + '  ||  ' + 
    display_description AS ITEM_1
FROM dbo.Equipment INNER JOIN
  dbo.ERAT ON SEQUENCE = SEQU INNER JOIN
  Track.dbo.item_link ON link_id = PRODUCTION_ID INNER JOIN
  Track.dbo.LinkParentDescription ON item_id = item_id
ORDER BY NUM ASC

基本上我想做的是..

如果 NUM 值与下一行的 NUM 值相同,则添加一个填充有

的新列
item_id + '  ||  ' + CONVERT(VARCHAR(50), PRODUCTION_ID) + '  ||  ' + display_description AS ITEM_2

使用下一行的信息。

我不得不按照要求匿名化这段代码,所以希望代码仍然有效(哈哈)

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    您可以在 SQL Server 2008 上使用窗口函数吗?相当于LEAD:

    MAX(NUM) OVER(ORDER BY NUM ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
    

    此表达式将为您提供下一行的NUM 值,其中行按NUM 升序排列。然后只需与CASE 表达式进行比较:

    CASE 
      WHEN NUM = MAX(NUM) OVER(ORDER BY NUM ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) 
        THEN item_id + '  ||  ' + CONVERT(VARCHAR(50), PRODUCTION_ID) + '  ||  ' 
             + display_description
      ELSE YYY
    END AS ITEM_2
    

    【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2020-10-09
    • 1970-01-01
    相关资源
    最近更新 更多