SQL-92 (Filemaker):如何更新序列号列表?

SQL-92 (Filemaker): How can I UPDATE a list of sequential numbers?

我需要重新分配所有 SortID,从 1 开始直到 MAX (SortID) 来自 table Beleg 的记录子集,使用 SQL-92,在其中一个 SortID 有更改(例如从 444 到 444.1)。我尝试了几种方法(例如 SET @a:=0; UPDATE table SET field=@a:=@a+1 WHERE whatever='whatever' ORDER BY field2),但它没有工作,因为这些解决方案都需要一种特殊的 SQL,例如 SQLServer 或 Oracle 等

我使用的 SQL 是 SQL-92,在 FileMaker 中实现(虽然可以使用 INSERT 和 UPDATE,但没什么特别的)。

感谢任何提示!

加里

据我所知,SQL-92 是一种标准,而不是一种语言。所以你可以说你正在使用 T-SQL,它主要是 SQL-92 兼容的,但你不能说我在 SQL-92 中编程 SQL 服务器。这同样适用于 FileMaker。

我想您正在尝试通过 ODBC 更新 table? Update 语句看起来不错,但如果 FileMaker SQL 则没有变量(而且我不确定在查询中使用变量是否会给您带来预期的结果,我想您会将每行中的 SortId 设置为 1)。您正在考虑在 TSQL 中使用 row() 执行类似 Window 的功能,但我认为此功能不可用。

最简单的解决方案是使用 FileMaker,重置列的编号确实是一项需要几秒钟的微不足道的任务。您需要这方面的帮助吗?

编辑:

我指的是 TSQL 函数 rank() 和 row_number(),TSQL

中没有 row() 函数

我终于从Ziggy Crueltyfree Zeitgeister on the Database Administrators copy of my question那里得到了答案。

他建议使用临时 table 存储结果将其分解为多个步骤:

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 中的 table 定义(让 Filemaker 以这种方式完成类型强制),并使用我的函数从中填充和删除:RenumberSortID ().