Ich muss alle SortIDs von 1 bis MAX (SortID) aus einer Teilmenge der Datensätze der Tabelle Beleg mithilfe von SQL-92 neu zuweisen, nachdem sich eine der SortIDs geändert hat (z. B. von 444 auf 444.1). Ich habe verschiedene Möglichkeiten ausprobiert (zum Beispiel SET @a: = 0; UPDATE-Tabelle SET field = @ a: = @ a + 1 WHERE Whatever = 'Whatever' ORDER BY field2), aber es hat nicht funktioniert, da diese Lösungen alle benötigen eine spezielle Art von SQL, wie SQLServer oder Oracle usw.

Das SQL, das ich verwende, ist SQL-92, das in FileMaker implementiert ist (INSERT und UPDATE sind zwar verfügbar, aber nichts Besonderes).

Danke für jeden Hinweis!

Gary

0
Gary Czychi 24 Dez. 2015 im 14:14

2 Antworten

Beste Antwort

Ich habe endlich die Antwort von Ziggy Crueltyfree Zeitgeister auf die Datenbankadministrator-Kopie meiner Frage.

Er schlug vor, dies mithilfe einer temporären Tabelle in mehrere Schritte zu unterteilen, um die Ergebnisse zu speichern:

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;

Na sicher! Ich behalte einfach die Tabellendefinition in Filemaker (lassen Sie den Typzwang von Filemaker auf diese Weise ausführen) und fülle und lösche sie mit meiner Funktion: RenumberSortID ().

0
Community 13 Apr. 2017 im 12:42

Soweit ich weiß, ist SQL-92 ein Standard und keine Sprache. Sie können also sagen, dass Sie T-SQL verwenden, das größtenteils SQL-92-kompatibel ist, aber Sie können nicht sagen, dass ich SQL Server in SQL-92 programmiere. Gleiches gilt für FileMaker.

Ich nehme an, Sie versuchen, Ihre Tabelle über ODBC zu aktualisieren? Die Update-Anweisung sieht in Ordnung aus, aber es gibt keine Variablen, wenn FileMaker SQL (und ich bin nicht sicher, ob die Verwendung einer Variablen in der Abfrage das erwartete Ergebnis liefert. Ich denke, Sie werden SortId in jeder Zeile auf 1 setzen). Sie denken darüber nach, so etwas wie Fensterfunktionen mit row () in TSQL auszuführen, aber ich glaube nicht, dass diese Funktionalität verfügbar ist.

Die einfachste Lösung ist die Verwendung von FileMaker. Das Zurücksetzen der Nummerierung für eine Spalte ist eine triviale Aufgabe, die Sekunden dauert. Benötigen Sie Hilfe dabei?

Bearbeiten:

Ich bezog mich auf die TSQL-Funktionen rank () und row_number (), es gibt keine row () -Funktion in TSQL

0
Nicolai Kant 27 Dez. 2015 im 14:13