Mehrere Datensätze in einem zusamenführen

LauraM

Ensign
Registriert
Nov. 2019
Beiträge
133
Hallo, ich habe folgene Sache. Ich bin zwar kein Programmierer, aber versuche mich einzuarbeiten.
Ich habe eine Abfrage , mit folgenden Ergebnis:
Code:
Parknr Thema Nummer
010008        Betrieb        0005-9935
010008        Betrieb        0005-9932
010012        Produkt       0005-2891

Nun möchte ich, dass wenn zu einem Parknummer mehreren Nummer sind, soll das als ein Datensatz ausgeben und somit so aussehen:

Code:
Parknr          Thema         Nummer
010008        Betrieb        0005-9935, 0005-9932
010012        Produkt       0005-2891

Mit welche Prozedur kann ich das tun?

Für jede kleine Tip werde ich sehr dankbar!
Laura

p.s. meine Abfrage:

Code:
Insert into tab
    (titel,
    verlag
  )

select
data245.ref.value( marc21:subfield[@code = "a"][1]','nvarchar(255)') Thema,
data022.ref.value( marc21:subfield[@code = "a"][1]','nvarchar(255)')Nummer
FROM (

Select tab1

FROM tabbuch

) xml
cross apply xml.xmlData.nodes(marc21:collection/marc21:record') as orga(ref)
cross apply orga.ref.nodes(marc21:datafield[@tag="245"]') data015(ref)
outer apply orga.ref.nodes(marc21:datafield[@tag="022"]') data022(ref)
 
Zuletzt bearbeitet:
Hi,

was für eine Datenbank ist das? In MySQL könnte man das mit einem GROUP_CONCAT in Kombination mit einem GROUP BY lösen

VG,
Mad
 
  • Gefällt mir
Reaktionen: cb_darkman
Hallo, ich habe die Funktion group_concat benutzt, aber kam ein Fehler:
Meldung 195, Ebene 15, Status 10, Zeile 2
'group_concat' wird nicht als Name einer integrierten Funktion erkannt.

Code:
 select group_concat(Nummer) from tab

Kann jemand was dazu sagen? Viele Grüße
Ergänzung ()

Ich habe das gefunden: stuff , aber kann ich nicht auf meinem Beispiel anwenden.

Könnte mir jemand helfen, bitte?
 
Zuletzt bearbeitet:
Hi,

Kann jemand was dazu sagen? Viele Grüße

ähm, ja - GROUP_CONCAT gibt es bei MSSQL nicht, das steht hier schon in diesem Thread und das sagt dir auch jede Doku oder eine kurze Google Suche!

Wieso suchst du nach MySQL Lösungen, wenn du einen MSSQL Server nutzt?

Könnte mir jemand helfen, bitte?

Es gibt Google, wenn ich da nach "MSSQL 12 GROUP_CONCAT" suche, was denkst du finde ich da? Und wieso kannst du "STUFF" nicht verwenden? Woran scheitert's?

Ein bisschen mehr Eigeninitiative bitte!

VG,
Mad
 
Wie ich oben geschrieben habe, STUFF habe ich als Funktion gefunden, aber für mein Beispiel habe ich Problem mit Umsetzen.
Ich habe gedacht, dass mir hier jemand helfen kann. Ich weiss, dass das eine Bitte um was fertiges ist, aber für mich als nicht Programmierer, ist das total alles schwer.

VG
Ergänzung ()

Ich habe jetzt die Lösung!!!

Code:
select ParkNr,
ergebnis=stuff(
        (select ',' + Nummer from tab1for xml path ('')), 1,1,''
            )
            from tab1 group by ParkNr

Aber ich muss sagen, es ist nicht einfach und für eine Antwoirt, manchmal für eine Lösung bin ich ja froh.

Ich habe hier viele Posten gesehen, dass die Leute um die Lösung bitten und bekommen.
Ich weiß muss man alleine was tun, aber wie gesagt, nicht jede ist vom Fach.

Viele Grüße
Ergänzung ()

Ich bekomme doch falsche Lösung.
Code:
Parknr          Thema         Nummer
010008        Betrieb        0005-9935, 0005-9932, 0005-2891
010012        Produkt       0005-9935, 0005-9932, 0005-2891
[/code)

es soll so aussehen:

[code]
Parknr          Thema         Nummer
010008        Betrieb        0005-9935, 0005-9932
010012        Produkt       0005-2891

Mhh, was ist bei meine Abfrage falsch???
 
Zuletzt bearbeitet:
Ich habe richtige Lösung:

Code:
select Parknr,  thema,
(select stuff((select ',' + Nummer
from tab1  t2 where t1.Parknr=t2.Parknr

for xml path('')),1,1,'')) as ergebnis

from tab1
group by Parknr,  thema

und Ergebnis:
Code:
Parknr          Thema         Nummer
010008        Betrieb        0005-9935, 0005-9932
010012        Produkt       0005-2891

Wie kann ich die TAbelle, die ich jetzt als Ergebnis habe, als Tabelle speichern.
Das würde ich gerne schon in der Abfrage einbauen wollen ... mit insert?
 
ja, ich habe es probiert, aber bekomme ich Fehler:

Code:
 Ein expliziter Wert für die Identitätsspalte kann nicht in der issn_verketten-Tabelle eingefügt werden, wenn IDENTITY_INSERT auf OFF festgelegt ist.

Ein Wert passt nicht.

Die Tabelle habe ich so aufgebaut:

Code:
CREATE TABLE  tab1_ver ( 
ParkNr INT IDENTITY(1,1) PRIMARY KEY,
Thema varchar(255),
Nummer varchar(255)

);
 
Hi,

in der Fehlermeldung steht doch explizit drin, was das Problem ist. Du kannst die "IDENTITY" nicht mit übergeben, wenn das deaktiviert wurde!

VG,
Mad
 
Ach, ich habe in der neue Tabelle ParkNr als Identity deklariert.
Jetzt funktioniert, ich habe in der Tabelle ParkNr als varchar geemacht und es geht!!!

oder gibt es bessere Lösung?
 
Hallo Laura,

es kommt darauf an, wie die Tabelle tab1_ver verwendet werden soll. Kommen die Datensätze immer aus solche Inserts, wo die ParkNr ausgelesen wird?
Hat dir irgendjemand vorgegeben die Spalte ParkNr mit Identity-Property anzulegen?

Die Spalte auf varchar zu ändern erscheint mir jedenfalls nicht sinnvoll. Du kannst entweder bei dein Insert folgendes machen:

SET IDENTITY_INSERT tab_ver1 ON

<dein Insert Statement>

SET IDENTITY INSERT tab_ver1 OFF

Oder du nimmst das Identity-Property ganz weg, das bedeutet dann aber, dass bei jedem Insert in die Tabelle ein Wert für ParkNr mitgegeben werden muss, und nie automatisch ein Wert generiert wird (was der eigentliche Sinn von Identity ist)

LG
 
Zurück
Oben