加入包含先前最大值的列

时间:2012-03-13 19:37:03

标签: sql tsql join max

好吧,说我有一个带有“代码”字段的表格。查询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 个答案:

答案 0 :(得分:4)

试试这个:

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 :(得分:1)

尝试

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