无法使用SQL-92(Filemaker)更新排序编号

时间:2016-04-13 10:17:51

标签: sql sorting filemaker

请帮助,我想用新的升序号更新我的SortID,但无法弄清楚,如何,因为FileMaker的SQL非常有限。

我无法使用FileMaker执行此操作,因为我不想丢失当前的FoundSet。

我有一个FileMaker函数RecordNumber,我在这里使用。无论结果如何排序,它总是返回升序数。

这是我的表,使用RecordNumber:

SELECT SortID, RecordNumber FROM Beleg
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210
ORDER BY SortID

产地:

.5  1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10  10
10.000001   11
10.000002   12

看起来很好。但我不能保留ORDER BY,当我使用UPDATE时,我收到错误。

但是,当我接受ORDER BY时,我的SortID将被错误地更新。当我离开ORDER BY时,这就是列表的样子:

SELECT SortID, RecordNumber FROM Beleg
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210

产生这个:

2   1
3   2
.5  3
4   4
5   5
6   6
7   7
8   8
9   9
10  10
10.000001   11
10.000002   12

使用声明:

UPDATE Beleg SET SortID = RecordNumber
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210

我在SortID中得到错​​误的值。 0.5应更新为1而不是3。

我输了。有关如何将升序数字写入我的SortID列的任何想法吗?

非常感谢!

加里

1 个答案:

答案 0 :(得分:0)

感谢Ziggy Crueltyfree Zeitgeister Stackexchange我得到了答案!

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

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()。