verschiedene Datensätze der gleichen Tabelle in einer Abfrage kombinieren

Hi Charly,

so in etwa habe ich das bereits probiert, bekomme allerdings eine FM:

Code:
 UPDATE @temp
    SET Vorname =
    CASE
    WHEN CHARINDEX(@Vorname,Vorname) = 0 THEN @Vorname + ' + ' + Vorname
    ELSE Vorname
 ,umvj = @umvj + umvj
 END
Die FM lautet:
Msg 102, Level 15, State 1, Procedure fn_MGE_Function1, Line 94
Incorrect syntax near ','.

lg, markus
 
Werbung:
Hallo Markus,

das END muss nach vorname stehen.

Code:
 UPDATE @temp
    SET Vorname =
    CASE
    WHEN CHARINDEX(@Vorname,Vorname) = 0 THEN @Vorname + ' + ' + Vorname
    ELSE Vorname END
,umvj = @umvj + umvj

Gruß Charly
 
Hallo Markus,

für Syntax-Fragen und kleine Beispiele zu den Befehlen ist die Online-Hilfe immer meine erste Anlaufstelle.

Eine Bücherliste (Was ich aus dem Bereich Datenbanken und Datenbank-Design so zuhause rumstehen habe) stelle ich morgen mal unter Angebote rein.

Gruß Charly
 
Hallo Zusammen,

ich möchte eine Abfrage erstellen die mir bestimmte Datensätze einer Tabelle (Adressen) zusammenfasst.

Datensatz Beispiel:

Thomas, Schuller, Römerweg 14, 6700
Ludwig, Schuller, Römerweg 14, 6700
Axel, Müller, Bundweg 1, 6800
Ralf, Schuster, Mintstr. 4, 6850

Gewünschtes Abfrage Ergebnis:

Thomas + Ludwig Schuller, Römerweg 14, 6700
Axel Müller, Bundweg 1, 6800
Ralf Schuster, Mintstr. 4, 6850

Die Logik ist also:
Wenn Nachname und Strasse und PLZ gleich sind, dann soll die Abfrage als Ergebnis die Namen zusammenfassen.

Version: SQL Server 2005

Ich bin für jede Anregung dankbar!

Sicherlich ist das Problem ja gelöst, aber zu kompliziert, wie ich finde...

Code:
test=*# select * from xp4mer1 ;
  vn  |  nm  |  str  | plz
--------+----------+-------------+------
 thomas | schuller | römerweg 14 | 6700
 ludwig | schuller | römerweg 14 | 6700
 axel  | müller  | bundweg 1  | 6800
 ralf  | schuster | mintstr. 4  | 6850
(4 rows)

Time: 0,196 ms
test=*# select array_to_string(array_agg(vn),' + ') || ' ' || nm, str, plz from xp4mer1 group by nm, str, plz;
  ?column?  |  str  | plz
--------------------------+-------------+------
 axel müller  | bundweg 1  | 6800
 thomas + ludwig schuller | römerweg 14 | 6700
 ralf schuster  | mintstr. 4  | 6850
(3 rows)

Könnte man sicherlich auch ähnlich in M$SQL machen.
 
Das Thema ist wirklich alt und ich habs jetzt nur überflogen aber es scheint ja gelöst. Dein Code mag super elegant sein und funktioniert unter PG aber unter MS SQL ist mir keine equivalente Funktion bekannt und auf die schnelle hab ich nichts finden können. In Folge haben wir hier keine wirkliche Problemlösung nur eine Demonstration was in einer anderen Welt möglich ist.

Mir wärs lieber du würdest dir die Mühe machen es selbst nach MS SQL zu portieren oder den Thread einfach zu lassen :)
 
Das Thema ist wirklich alt und ich habs jetzt nur überflogen aber es scheint ja gelöst. Dein Code mag super elegant sein und funktioniert unter PG aber unter MS SQL ist mir keine equivalente Funktion bekannt und auf die schnelle hab ich nichts finden können. In Folge haben wir hier keine wirkliche Problemlösung nur eine Demonstration was in einer anderen Welt möglich ist.

Es gibt doch sicher irgend welche Aggregatfunktionen für Texte, oder nicht?

Mir wärs lieber du würdest dir die Mühe machen es selbst nach MS SQL zu portieren oder den Thread einfach zu lassen :)

Wenn Du mir hilfst, M$SQL auf meinem Linux zu installieren, ...
 
Werbung:
Es gibt doch sicher irgend welche Aggregatfunktionen für Texte, oder nicht?
Ich glaube es ließe sich mit WITH bewerkstelligen. Hier mal der Code von einer Ordnerstruktur den ich als Sicht nutze:
Code:
WITH c AS (
    SELECT    pk,
            '/'+cast(pk as varchar(1000)) as pathid,
            '/'+cast(bezeichnung as varchar(1000)) as [path]
    FROM    auf b
    WHERE    b.fk_ueber IS NULL
    UNION ALL
    SELECT    b.pk,
            cast(c.pathid+'/'+cast(b.pk as varchar(36)) as varchar(1001)),
            cast(c.[path]+'/'+cast(b.bezeichnung as varchar(70)) as varchar(1001))
    FROM    auf b join c on b.fk_ueber = c.pk )
SELECT    b.pk,
        c.pathid+'/' as pfadid,
        c.[path]+'/' as pfad
FROM    c join auf b on c.pk = b.pk
Dennoch kenne ich keinen einfachen Weg Text zu aggregieren und finde auch keine Lösung die mit deiner vergleichbar wäre.


Wenn Du mir hilfst, M$SQL auf meinem Linux zu installieren, ...
Nein.
 
Zurück
Oben