我需要在其中一个SortID发生变化之后,使用SQL-92重新分配所有SortID,从1到MAX(SortID)从表Beleg的记录子集开始(例如从444到444.1)。我尝试了几种方法(例如SET @a:= 0; UPDATE表SET字段= @ a:= @ a + 1 WHERE无论='无论' ORDER BY field2),但它没有'因为这些解决方案都需要一种特殊的SQL,比如SQLServer或Oracle等。
我使用的SQL是SQL-92,在FileMaker中实现(INSERT和UPDATE虽然可用,但没什么特别的。)
感谢任何提示!
加里
答案 0 :(得分:0)
据我所知,SQL-92是标准而非语言。所以你可以说你使用的是T-SQL,它主要是SQL-92兼容的,但你不能说我在SQL-92中编写SQL Server。这同样适用于FileMaker。
我想您正在尝试通过ODBC更新表? Update语句看起来没问题,但是如果FileMaker SQL没有变量(我不确定在查询中使用变量会给你预期的结果,我想你会在每一行中将SortId设置为1)。您正在考虑在TSQL中使用带有row()的Window函数,但我认为此功能不可用。
最简单的解决方案是使用FileMaker,重置列的编号实际上是一项微不足道的任务,需要几秒钟。你需要帮助吗?
编辑:
我指的是TSQL函数rank()和row_number(),TSQL中没有row()函数
答案 1 :(得分: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中(让文件制作者以这种方式完成类型强制),并使用我的函数填充和删除它:RenumberSortID()。