I'm not an SQL expert, but this works:
With e AS (
SELECT id, Name, Lead(Name) OVER (ORDER BY id) AS 'next' from MyTable
) SELECT Id, Name, next FROM e WHERE Name='French'
There may be more efficient solutions, but since the table is about languages I don't expect it to contain millions of records. Therefore I think performance will hardly be an issue.
/Edit:
This code does the same and I suppose that it will be indeed more efficient for large tables since it will not first calculate all 'next' fields for the entire table:
SELECT d.*, e.Next
FROM MyTable d OUTER APPLY
(SELECT TOP(1) Name AS Next
FROM Mytable e
WHERE e.Id > d.Id
ORDER BY Id
) AS e
WHERE d.Name = 'French'
OVERclause? What were you expecting here?LEADis calculated afterWHERE.HAVING name = 'French'to perform the filter after getting the result set.