присоединиться к столбцу, который содержит предыдущий максимум - PullRequest
3 голосов
/ 13 марта 2012

Хорошо, скажем, у меня есть таблица с полем "код".Запрос select code from mytable group by code возвращает:

code
EM010
EM100
EM101
EM105
EM106
...

Мне нужно добавить столбец (с объединением или чем-то еще), который будет содержать следующий наивысший код.Вышесказанное обернулось бы следующим:

code    code2
EM010   null (or blank or wtvr)
EM100   EM010
EM101   EM100
EM105   EM101
EM106   EM105
...     ...

Я бы предоставил то, что попробовал, но это грязно, и я продолжаю понимать, что поступаю неправильно.

кстати, яя работаю в vfp, так что технически это tsql, но я должен быть в состоянии преобразовать все, что отличается, поэтому я не против, если я получу ответы, которые не были проверены в tsql.

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

Попробуйте:

WITH T1 AS
(
    SELECT code, ROW_NUMBER() OVER (ORDER BY code) AS rn FROM
    (
        SELECT DISTINCT code FROM mytable
    )
)
SELECT T1.code, T2.code AS code2
FROM T1
LEFT JOIN T1 AS T2
ON T1.rn = T2.rn + 1

Кстати, в SQL Server 2012 вы можете использовать аналитическую функцию LAG , которая делает то, что вы хотите.Я не уверен, поддерживает ли Visual Fox Pro это.

1 голос
/ 13 марта 2012

Попробуйте

DECLARE @T TABLE (Code VARCHAR(5))
INSERT @T VALUES ('EM010'), ('EM100'), ('EM101'), ('EM105'), ('EM106')

SELECT  T1.Code,
        (   SELECT  MAX(Code)
            FROM    @T t2
            WHERE   t1.Code > t2.Code
        ) AS Code2
FROM    @T t1
...