2015-12-24 3 views
0

Мне нужно повторно назначить все SortID, начиная с 1 до MAX (SortID) из подмножества записей таблицы Beleg, используя SQL-92, после изменения одного из SortID (например, с 444 по 444.1). Я попробовал несколько способов (например, SET @a: = 0; таблица UPDATE SET поле = @ a: = @ a + 1 WHERE what = 'whatever' ORDER BY field2), но это не сработало, так как все эти решения нужен особый вид SQL, например SQLServer или Oracle, и т. д.SQL-92 (Filemaker): Как я могу ОБНОВИТЬ список последовательных номеров?

SQL, который я использую, - это SQL-92, реализованный в FileMaker (INSERT и UPDATE доступны, хотя и ничего необычного).

Спасибо за подсказку!

Гэри

ответ

0

я, наконец, получил ответ от Ziggy Crueltyfree Zeitgeister на the Database Administrators copy of my question.

Он предложил, чтобы разорвать этот вниз на несколько шагов, используя временную таблицу для хранения результатов:

CREATE TABLE sorting (sid numeric(10,10), rn int); 

INSERT INTO sorting (sid, rn) 
SELECT SortID, RecordNumber FROM Beleg 
WHERE Year (Valuta) = 2016 
AND Ursprungskonto = 1210 
ORDER BY SortID; 

UPDATE Beleg SET SortID = (SELECT rn FROM sorting WHERE sid=Beleg.SortID) 
WHERE Year (Valuta) = 2016 
AND Ursprungskonto = 1210; 

DROP TABLE sorting; 

Конечно! Я просто держу определение таблицы в Filemaker (пусть это принуждение типа выполняется Filemaker таким образом), и заполнение и удаление из него моей функцией: RenumberSortID().

0

Из того, что я знаю, SQL-92 является стандартом, а не язык. Таким образом, вы можете сказать, что используете T-SQL, который в основном совместим с SQL-92, но вы не можете сказать, что я программирую SQL Server в SQL-92. То же самое относится к FileMaker.

Я полагаю, вы пытаетесь обновить свой стол через ODBC? Операция обновления выглядит нормально, но нет переменных, если FileMaker SQL (и я не уверен, что использование переменной внутри запроса даст вам результат, который вы ожидаете, я думаю, вы установите SortId в каждой строке равным 1). Вы думаете о том, чтобы делать что-то вроде функций Window с помощью row() в TSQL, но я не думаю, что эта функция доступна.

Простейшим решением является использование FileMaker, сброс нумерации для столбца - действительно тривиальная задача, которая занимает несколько секунд. Вам нужна помощь в этом?

Edit:

Я имел в виду TSQL функции ранга() и row_number(), нет функции строки() в TSQL

+0

Thanks; с Filemaker очень легко - если вы находитесь в правильном найденном наборе, но очень неуклюжие в противном случае. Вот почему я ищу SQL-решение. –

+0

Какая SQL-база данных вы используете: сам FileMaker (через executeSQL) или другой? –

+0

Я использую функцию epSQLExecute из Dracoventions (которая в основном является функцией executeSQL Filemaker, но с добавлением INSERT и UPDATE). –