AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Stati per Select aneinandergereiht
Thema durchsuchen
Ansicht
Themen-Optionen

Stati per Select aneinandergereiht

Ein Thema von smudo · begonnen am 18. Nov 2005 · letzter Beitrag vom 18. Nov 2005
Antwort Antwort
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#1

Stati per Select aneinandergereiht

  Alt 18. Nov 2005, 08:45
Datenbank: Interbase • Version: 6.1 • Zugriff über: egal
Hallo,

ich habe gestern hier schon zu diesem Thema sehr gute Anregungen erhalten.
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 )
Mit einem kleinen Delphi-Prog klappt das schon. Mich würde nur interessieren, ob es auch direkt über SQL funktioniert?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Stati per Select aneinandergereiht

  Alt 18. Nov 2005, 08:54
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'
)
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Stati per Select aneinandergereiht

  Alt 18. Nov 2005, 09:14
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é
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Stati per Select aneinandergereiht

  Alt 18. Nov 2005, 09:39
...etwas zu zeitig jubiliert

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é
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Stati per Select aneinandergereiht

  Alt 18. Nov 2005, 09:45
Natürlich kennt die IB SPL auch cursor - schau mal in der SQLREF.HLP unter DECLARE CURSOR.

marabu
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Stati per Select aneinandergereiht

  Alt 18. Nov 2005, 10:03
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^
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz