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