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
2 Antworten
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 ().
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
Neue Fragen
sql
Structured Query Language (SQL) ist eine Sprache zum Abfragen von Datenbanken. Zu den Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) gehören. Wenn sich Ihre Frage ausschließlich auf ein bestimmtes DBMS bezieht (bestimmte Erweiterungen / Funktionen verwendet), verwenden Sie stattdessen das Tag dieses DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten ISO / IEC-Standard-SQL verwenden.