Split String

Lukas987

Benutzer
Beiträge
23
Hei,
habe ein Problem, und zwar:
ich habe ein parameter Lieferantnummer und an hand von dem hol ich mir die LieferantenNamen doch die stehen ja dann so da: Lieferant1Lieferant2 usw. und ich will sie so splitten: Lieferant1, Lieferant 2....
kann mir jemand den trick verraten oder weiterhelfen? :eek: finde hierfür nichts in google :/
 
Werbung:
Mit welcher Abfrage holst du aus welcher Tabelle (wie aufgebaut) die Lieferanten? Normalerweise werden mehrere Lieferanten in mehreren Zeilen ausgegeben und nicht hintereinander gehängt.
 
Hei,
habe ein Problem, und zwar:
ich habe ein parameter Lieferantnummer und an hand von dem hol ich mir die LieferantenNamen doch die stehen ja dann so da: Lieferant1Lieferant2 usw. und ich will sie so splitten: Lieferant1, Lieferant 2....
kann mir jemand den trick verraten oder weiterhelfen? :eek: finde hierfür nichts in google :/

Zeig doch mal, was Du machst. Ich denke mal, das kann man in die Abfrage einbauen...
 
DECLARE @Parameters AS TABLE
(
Name VARCHAR(50)
, Value VARCHAR(MAX)
);
INSERT INTO @Parameters
( Name, Value )
VALUES ('Lieferanten', @LieferantenNamen)
 
SELECT @lieferantenNamen = COALESCE(@lieferantenNamen, ', ', '')+ a.Name1 , das hatt ich anfangs (habs im inet gelesen) das macht es aber so:
, Lieferant1Lieferant2 .....
 
Hi Lukas.

Vielleicht hilft dir ja das hier als Denkansatz:

Code:
WITH Lieferanten (LieferantenNr, LieferantenName)
AS (
   SELECT CAST(111 as int), 'Lieferant A'
UNION
   SELECT CAST(222 as int), 'Lieferant B'
UNION
   SELECT CAST(333 as int), 'Lieferant C'
)

SELECT DISTINCT
      SUBSTRING((SELECT ', ' + LieferantenName FROM Lieferanten B For XML Path('')), 2, 8000) AS LieferantenListe 
FROM Lieferanten A
Die CTE dient nur zur Veranschaulichung!

Code:
LieferantenListe
-------------------------------------
Lieferant A, Lieferant B, Lieferant C

Gruß
Hony
 
Ich versteh das grad irgendwie nicht. Also, ich hab ne prozedur, mit dem parameter leiferant, da kann ich theoretisch 700000 Lieferanten eingeben (eingabe folgt anhand der lieferantennummer). dann anhand der nummern nehm ich die namen, aber die schreibt es aneinander wie beschrieben... und ich will anhand des declaration DECLARE @lieferantenNamen AS VARCHAR(MAX); meine Lieferantennamen drin haben und wieder geben (soll am ende ein bericht sein und das was ich grad mach wird der kopf) ...
 
@Lukas987
Wo kommen den die Lieferantennamen her? Die stehen doch sicher in einer Tabelle. Alles was du für mein Beispiel benötigst ist eine Menge aus der du die Namen selektieren kannst.

Hier mal das gleiche Beispiel mit einer Selektion:
Code:
WITH Lieferanten (LieferantenNr, LieferantenName)
AS (
  SELECT CAST(111 as int), 'Lieferant A'
UNION
  SELECT CAST(222 as int), 'Lieferant B'
UNION
  SELECT CAST(333 as int), 'Lieferant C'
),
Liste (Nummer)
AS (
  SELECT CAST(111 as int)
UNION
  SELECT CAST(333 as int)
)

SELECT DISTINCT
  SUBSTRING(
      (SELECT ', ' + LieferantenName
      FROM Lieferanten B
      WHERE LieferantenNr IN (SELECT * FROM Liste)
      FOR XML Path('')),
  2, 8000) AS LieferantenListe
FROM Lieferanten A
 
Du kannst entweder die Menge Lieferant dynamisch erzeugen oder die Menge Liste. Du brauchst für den Ansatz aber in jedem Fall eine Menge die du verketten kannst. In meinem Beispiel dient die CTE nur dazu damit man sich was ansehen kann. Relevant für die Verkettung ist nur dieser Teil:
Code:
SELECT ', ' + LieferantenName FROM Lieferanten B FOR XML Path('')

Der Substring sorgt dafür, dass das führende Komma abgeschnitten wird.
 
Werbung:
Hony, darauf bin ich auch gekommen aber leider zu später als du :D und ich habs dann vergessen aber hab was besseres gefunden: COALESCE(@lieferantenNamen + ', ', '') geht perfekt. Aber danke für eure hilfe :)
 
Zurück
Oben