Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Unterabfrage die einen zusammengesetzten Wert zurückgibt (https://www.delphipraxis.net/112057-sql-unterabfrage-die-einen-zusammengesetzten-wert-zurueckgibt.html)

Salomon 14. Apr 2008 14:40

Datenbank: MS SQL • Version: 2005 • Zugriff über: ADO

SQL Unterabfrage die einen zusammengesetzten Wert zurückgibt
 
Hallo,
ich habe in einem SQL eine Unterbafrage die mehrere Werte zurückgeben kann. Dies funktioniert nicht.

Ist es möglich das die Unterfrage, die mehrere Namen von Kategorien zurückgibt diese alle zu einem großen String zusammenfügt, und dann nur diesen zusammengefügten String an die übergeordnete Query zurückgibt??

SQL-Code:
Categeogries = (select Categoryname from tb_domaininvolve, tb_domains where domainid = fk_domainid and fk_issueid = IssueID)
Quasi so wie in diesem PSeudo Code:
SQL-Code:
Categeogries = While (select Categoryname from tb_domaininvolve, tb_domains where domainid = fk_domainid and fk_issueid = IssueID) <> eof do Return := Return +', ' +Categoryname;

Gruß
Marcus

NormanNG 14. Apr 2008 14:46

Re: SQL Unterabfrage die einen zusammengesetzten Wert zurück
 
Hi,

eine Unterabfrage als Spalte kann immer nur einen Wert zurückgeben.
Aber man kann durchaus folgendes machen:
SQL-Code:
select A.spalte1, A.spalte2, B.Spalte1
from tabelle1 A,
( select id, spalte1 from tabelle2 ) B
where A.id=B.id

omata 14. Apr 2008 20:08

Re: SQL Unterabfrage die einen zusammengesetzten Wert zurück
 
Keine Reaktion = Keine Antwort.

Salomon 17. Apr 2008 07:45

Re: SQL Unterabfrage die einen zusammengesetzten Wert zurück
 
@omata: Schade das du deine Antwort wieder rausgenommen hast. Sie war Qualitativ meine ich sehr hochwertig. Da sie sehr komplex war wäre ich erst heute dazugekommen sie genauer durchzusehen und zu verstehen. Ein einfaches copy und paste kommt für mich nicht in Frage.
Gestern und vorgestern hatte ich leider sehr starke Probleme mit meiner Software, so das mir einfach die Zeit fehlte deine Antwort genauer durchzusehen. sorry

rwachtel 17. Apr 2008 08:48

Re: SQL Unterabfrage die einen zusammengesetzten Wert zurück
 
Zitat:

Zitat von omata
Keine Reaktion = Keine Antwort.

Schade, denn Deine Antwort scheint hilfreich gewesen zu sein. Leider können jetzt - bis auf die vorhergehenden Threadteilnehmer - keine anderen interessierten Leser daran partizipieren.

Vielleicht solltest Du dann demnächst doch einfach per PM Deine Antworten übermitteln.

:wall:

omata 17. Apr 2008 19:49

Re: SQL Unterabfrage die einen zusammengesetzten Wert zurück
 
Ich finde es einfach unhöflich, wenn man keine Antwort erhält. Wenn der Fragende dann hier im Forum online ist und nicht antwortet, dann kann ich schonmal etwas säuerlich reagieren. Immerhin ist es meine Zeit die ich dem Fragenden zur Verfügung stelle, wenn dieser es dann nichtmal für nötig hält eine Reaktion zu zeigen, dann ist für mich auch Schluss.

Das mag ja super gemein sein und mit der PM wäre das ja auch eine Variante, allerdings würde es dann wohl gar keine Antworten mehr meinerseits geben.

Wie auch immer ich mag das miteinander und nicht das einseitige Abgreifen von Informationen. Mich interressiert es ja auch ob meine Lösung den erwünschten Erfolg gebracht hat.

Wie auch immer...


Das was du suchst ist ein GROUP_CONCAT, das gibt es unter MySQL. MSSQL hat diesen traumhaften Befehl leider noch nicht für sich entdeckt.

MySQL:
SQL-Code:
SELECT TRIM(GROUP_CONCAT(' ', categoryname)) AS categeogries
FROM tb_domaininvolve x
INNER JOIN tb_domains y
  ON    x.fk_domainid = y.domainid
     AND x.fk_issueid = y.IssueID
MSSQL:
SQL-Code:
EXECUTE ('
  DECLARE @bez VARCHAR(1000)
  DECLARE @result VARCHAR(8000)

  DECLARE data CURSOR FOR
  SELECT categoryname
  FROM tb_domaininvolve x
  INNER JOIN tb_domains y
    ON    x.fk_domainid = y.domainid
       AND x.fk_issueid = y.IssueID

  SET @result = ''''
  OPEN data
  FETCH NEXT FROM data INTO @bez
  WHILE @@FETCH_STATUS = 0 BEGIN
    SET @result = @result + @bez + '', ''
    FETCH NEXT FROM data INTO @bez
  END
  CLOSE data

  DEALLOCATE data

  IF @result <> '''' BEGIN
    SET @result = SUBSTRING(@result, 1, DATALENGTH(@result)-2)
  END

  SELECT @result AS categeogries
')

Salomon 21. Apr 2008 09:45

Re: SQL Unterabfrage die einen zusammengesetzten Wert zurück
 
Hallo Omata,
dein MS SQL Code der den MySQL GRPUP_CONCAT Befehl ersetzt funktioniert super :)

Nochmal vielen Dank für die Hilfe!

Gruß
Marcus


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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