Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-92(Filemaker):如何更新序列号列表?_Sql_Filemaker - Fatal编程技术网

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

SQL-92(Filemaker):如何更新序列号列表?,sql,filemaker,Sql,Filemaker,在一个SortID发生更改(例如从444更改为444.1)后,我需要使用SQL-92从表Beleg的一个子集记录中重新分配所有SortID,从1到MAX(SortID)。我尝试了几种方法(例如SET@a:=0;UPDATE table SET field=@a:=@a+1 WHERE whatever='whatever'ORDER BY field2),但都不起作用,因为这些解决方案都需要一种特殊的SQL,如SQLServer或Oracle等 我使用的SQL是SQL-92,在FileMaker

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

我使用的SQL是SQL-92,在FileMaker中实现(虽然可以使用插入和更新,但没有特别之处)

谢谢你的提示


据我所知,SQL-92是一种标准而不是一种语言。因此,您可以说您正在使用T-SQL,这主要是符合SQL-92的,但您不能说我在SQL-92中编程SQL Server。这同样适用于FileMaker

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

最简单的解决方案是使用FileMaker,重置列的编号实际上是一项耗时数秒的琐碎任务。你需要帮忙吗

编辑:


我指的是TSQL函数rank()和row_number(),TSQL中没有row()函数,我最终从上得到了答案

他建议使用一个临时表将结果分解为多个步骤:


当然!我只是将表定义保留在Filemaker中(让Filemaker以这种方式执行类型强制),并使用我的函数RenumberSortID()进行填充和删除。

谢谢;使用Filemaker非常容易——如果您在正确的查找集中,但是在其他方面非常笨拙。这就是我寻找SQL解决方案的原因。您使用哪个SQL数据库:FileMaker本身(通过executeSQL)还是另一个?我使用的是Draconventions的epSQLExecute函数(基本上是FileMaker的executeSQL函数,但添加了INSERT和UPDATE)。我能找到的最接近的答案是:
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;