![]() |
Datenbank: Interbase • Version: 6.1 • Zugriff über: egal
Stati per Select aneinandergereiht
Hallo,
ich habe gestern ![]() Ich erläutere nochmal kurz den Inhalt: Ich habe eine Detailtabelle in welcher zu einer Person verschiedene Stati gespeichert sind: Person1 S1 Person1 S2 Person1 S3 Person2 S1 Person2 S3 Person3 S1 Person3 S2 Jetzt möchte ich per Select alle Stati zu einer Person aneinanderreihen, sodass ich pro Person nur noch einen Datensatz mit einem Feld, welches alle zur Person zugeordneten Stati enthält, erhalte. (erhalten tun tue :zwinker: ) Mit einem kleinen Delphi-Prog klappt das schon. Mich würde nur interessieren, ob es auch direkt über SQL funktioniert? |
Re: Stati per Select aneinandergereiht
Hallo René,
aneinanderreihen? Wenn du eine String-Verkettung meinst, dann wirst du es über eine Stored Procedure machen müssen, da Interbase die speziellen Group-Aggregate von MySQL (GROUP-CONCAT) nicht kennt. Ohne Verkettung wäre eine Matrix-Transposition notwendig, die von IB SQL auch nicht unterstützt wird. Grüße vom marabu Nachtrag: Wenn du deine Stati auf binäre Zustände zurückführen kannst, dann hilft dir vielleicht folgende Denormalisierung - ungetestet, aber die Idee sollte rüber kommen:
SQL-Code:
SELECT person, SUM(status) AS status FROM (
SELECT person, 1 AS status FROM details WHERE status = 'S1' UNION SELECT person, 2 AS status FROM details WHERE status = 'S2' UNION SELECT person, 4 AS status FROM details WHERE status = 'S3' ) |
Re: Stati per Select aneinandergereiht
Hallo marabu,
das mit der Stored Proc sollte funktionieren, werd ich gleich mal umsetzen. Dein zweiter Vorschlag ist sehr interessant, dürfte aber etwas umständlich werden, da ich sehr viele Stati vorzuliegen habe. Vielen Dank René |
Re: Stati per Select aneinandergereiht
...etwas zu zeitig jubiliert :gruebel:
In einer SP kann ich per Select Into natürlich immer nur einen Wert abfragen und abspeichern. Ein Weg wäre also für jeden Status zu dieser Person eine Abfrage auszuführen, das ist aber inakzeptabel, da die Menge der möglichen Stati sehr groß ist. In MS-SQL-Server hätte ich jetzt einfach einen Cursor auf die abgefragte Menge der Stati gesetzt. Geht sowas in Interbase auch? René |
Re: Stati per Select aneinandergereiht
Natürlich kennt die IB SPL auch cursor - schau mal in der SQLREF.HLP unter DECLARE CURSOR.
marabu |
Re: Stati per Select aneinandergereiht
So, ich habs jetzt:
SQL-Code:
CREATE PROCEDURE GETSTATILISTE (
PNR CHAR(15) CHARACTER SET ISO8859_1) RETURNS ( STATILISTE VARCHAR(999) CHARACTER SET ISO8859_1) AS DECLARE VARIABLE STATUS VARCHAR(10) CHARACTER SET ISO8859_1; begin statiliste=''; for select details.status from details d where d.PNr=:PNr into :status as cursor StatCursor do begin if (statiliste='') then statiliste=:statiliste || :status; else statiliste=:statiliste || ', ' || :status; end suspend; end^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz