запрос информации из следующего ряда - PullRequest
0 голосов
/ 30 сентября 2019

Я создал этот SQL и не знаю, как запросить следующую строку. Мы используем SQL 2008, поэтому нельзя использовать lag / lead

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

с использованием информации из следующей строки.

Мне пришлось анонимизировать этот код, как мне сказали, так что, надеюсь, код все еще действителен(смеется)

enter image description here

1 Ответ

0 голосов
/ 30 сентября 2019

Можете ли вы использовать оконную функцию в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...