Я знаю, что нет ничего подобного ROW_NUMBER() OVER ... в SQLite, но я не могу найти что-нибудь о чем-то похожее на CROSS APPLY.
Если есть что-то, что эквивалентно CROSS APPLY, вы можете сделать следующее. (EDIT: Я заметил, что для школ необходимо иметь несколько команд. Это решение будет работать только с одной командой в школе. Насколько мне известно, вам потребуется рекурсивный CTE и ROW_NUMBER, в противном случае --- которые не являются доступны в SQLite к моему знанию)
Если нет, то вы, вероятно, придется использовать время цикла и временные таблицы, чтобы заполнить это. Если это так, тогда нет реального выигрыша от использования SQL, и я бы предложил перейти по коду.
EDIT: Однако это решение таблицы темпа, как было предложено. Вам нужно внутреннее время, так как вы можете иметь несколько команд в школе (что-то я пренебрег до и делает CROSS ОТНОСИТЬСЯ решение не работать без рекурсивного CTE и ROW_NUMBER, который был отредактирован для подтверждения)
CREATE TABLE #SchoolList
(Id INT IDENTITY(1,1), School VARCHAR(50))
INSERT INTO #SchoolList
SELECT DISTINCT School
FROM TeamTable
CREATE TABLE #TeamList
(TeamNumber INT IDENTITY(1,1), Pos INT, Name VARCHAR(50),
School VARCHAR(50))
DECLARE @CurrentSchool VARCHAR(50), @CurrentSchoolPos INT
DECLARE @CurrentSchoolLookupId INT
SET @CurrentSchoolId = 1
WHILE EXISTS (SELECT 1 FROM #SchoolList WHERE Id > @CurrentSchoolLookupId)
BEGIN
SELECT @CurrentSchool = School FROM #SchoolList
WHERE Id = @CurrentSchoolLookupId
SET @CurrentSchoolPos = SELECT TOP 1 Pos FROM TeamTable
WHERE School = @CurrentSchool
ORDER BY POS
WHILE ISNULL(@CurrentSchoolPos, 0) > 0
BEGIN
INSERT INTO #TeamList
SELECT Pos, Name, School
FROM TeamTable
WHERE School = @CurrentSchool AND Pos = @CurrentSchoolPos
SET @CurrentSchoolPos = SELECT TOP 1 Pos FROM TeamTable
WHERE School = @CurrentSchool
AND Pos > @CurrentSchoolPos ORDER BY POS
END
SET @CurrentSchoolLookupId = @CurrentSchoolLookupId + 1
END
SELECT * FROM #TeamList
точно 4 или> = 4? –