Announcement

Collapse
No announcement yet.

String aufteilen in spalten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String aufteilen in spalten

    Hallo zusammen,

    ich habe eine Funktion die aus einer Tabelle alle fertigen Arbeitsgänge eines Bauteils ausliest und mit komma getrennt zurück gibt:

    Z.B.: "ALU,BYS,GLA,"
    Insgesamt gibt es 14 verschiedene Arbeitsgänge und der genannten Funktion werden NUR die Fertigen zurück gegeben!

    Diesen String möchte ich so aufbereiten, das ich z.B.: eine Tabelle mit 14
    Spalten habe:
    ABL,BYS,ALU,HOL,GLA,HOP,HKA,PAS,zbh,GSC,D04,tru,BE N,PRO,

    und wenn die Funtion einen dieser Werte ausgibt, soll in der zweiten Zeile in der passenden Spalte ein 'x' stehen

    Beim Rückgabewert von oben sollte das Ergebniss dann so aussehen:
    ABL,BYS,ALU,HOL,GLA,HOP,HKA,PAS,zbh,GSC,D04,tru,BE N,PRO,
    X__,X__,___,____,X__,___,___,___,___,___,___,___,_ __,___,


    Ich hoffe ich hab das einigermaßen verständlich ausgedrückt und hoffe ihr könnt mir helfen!

    Vielen Dank schon mal im vorraus!

    mfg

  • #2
    Vielleicht gibt es ja auch die Möglichkeit, die im Bild zu sehenden Zeilen in Spalten um zulegen??

    Das alle magr aus einem bauftrag in Spalten geschieben werden
    z.B.:

    200043|Datum|Termin|Fix|Montagefertig|ABL|BYS|ALU| GLA


    Danke!

    mfg
    Attached Files

    Comment


    • #3
      Schau in BOL unter "Pivot" nach...

      Comment


      • #4
        Hallo ebis,

        vielen Dank für die Antwort, aber was ist BOL und wo finde ich das?

        Danke ung Gruß

        Comment


        • #5
          Sorry habs schon Danke! Werd das mal versuchen!!!

          Danke

          Comment


          • #6
            BOL steht für "Books online", auf englisch hier zu finden:
            http://msdn.microsoft.com/en-us/library/ms130214.aspx

            das Gleiche auf deutsch heisst "Onlinedokumentation":
            http://msdn.microsoft.com/de-de/library/ms130214.aspx

            will man nicht dauernd online sein, kann man sich's natürlich auch herunterladen:
            http://www.microsoft.com/downloads/d...3-29C1E0B6585F

            bye,
            Helmut

            Comment


            • #7
              hmmm, mit Pivot klappt das leider nicht so, da ich ja keine Aggregatfunktion anwenden kann.

              Die Ausgangstabelle sieht ja so aus:

              bauftrag|magr

              200043|ABL
              200043|BYS
              200043|ALU
              200043|GLA

              Ich brauch das so:

              200043 | ABL | BYS | ALU | GLA

              Comment


              • #8
                Pivot geht auch mit-ohne Aggreation, siehe
                http://entwickler-forum.de/showthread.php?t=53897
                Olaf Helper

                <Blog> <Xing>
                * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                Comment


                • #9
                  Danke für die Hilfen!

                  Aber das mit Max() hab ich schon ausprobiert! Da bekomm ich nur NULL ausgegeben!

                  Comment


                  • #10
                    Dann machst Du etwas nicht richtig.
                    Selbst wenn NULL Werte in den Daten vorhanden wären, die Aggregation "verwirft" diese Werte; im Management Studio wird einem das sogar als Meldung angezeigt.
                    Olaf Helper

                    <Blog> <Xing>
                    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                    Comment


                    • #11
                      Ich weiß nicht was ich falsch mache! Vielleicht ist aber der gesamte Aufbau der Abfrage falsch, da es für einen bauftrag ja mehrere magr geben kann!

                      Und wenn ich das jetzt nach bauftrag gruppiere bekomme ich ja immer nur den ersten Datensatz angezeigt!

                      Die Ausgangstabelle sieht ja so aus:

                      bauftrag|magr

                      200043|ABL
                      200043|BYS
                      200043|ALU
                      200043|GLA

                      Brauche unbedingt Hilfe!!!!!

                      Comment


                      • #12
                        Hallo whistler,

                        hast Du es mittlerweile gelöst?
                        nach bauftrag gruppiere bekomme ich ja immer nur den ersten Datensatz
                        Du sollst ja auch nicht gruppieren, sondern pivotisieren.

                        [highlight=SQL]SET NOCOUNT ON;
                        CREATE TABLE #bau
                        (bauftrag int, magr varchar(20));

                        INSERT INTO #bau VALUES(200043, 'ABL');
                        INSERT INTO #bau VALUES(200043, 'BYS');
                        INSERT INTO #bau VALUES(200043, 'ALU');
                        INSERT INTO #bau VALUES(200043, 'GLA');

                        INSERT INTO #bau VALUES(200065, 'BYS');
                        INSERT INTO #bau VALUES(200065, 'HOP');
                        INSERT INTO #bau VALUES(200065, 'HKA');
                        GO

                        SELECT bauftrag,
                        CASE WHEN [ABL] IS NULL THEN '' ELSE 'X' END AS [ABL],
                        CASE WHEN [ALU] IS NULL THEN '' ELSE 'X' END AS [ALU],
                        CASE WHEN [BYS] IS NULL THEN '' ELSE 'X' END AS [BYS],
                        CASE WHEN [GLA] IS NULL THEN '' ELSE 'X' END AS [GLA],
                        CASE WHEN [HOP] IS NULL THEN '' ELSE 'X' END AS [HOP],
                        CASE WHEN [HKA] IS NULL THEN '' ELSE 'X' END AS [HKA]
                        FROM
                        (SELECT bauftrag, [ABL], [ALU], [BYS], [GLA], [HOP], [HKA]
                        FROM (SELECT bauftrag, magr
                        FROM #bau
                        GROUP BY bauftrag, magr
                        ) AS Source
                        PIVOT (MAX(magr)
                        FOR magr IN ([ABL], [ALU], [BYS], [GLA], [HOP], [HKA])
                        ) AS PVT
                        ) AS Sub
                        ORDER BY bauftrag;

                        GO
                        DROP TABLE #bau;
                        [/highlight]
                        Ergebnis:
                        [highlight=code]bauftrag ABL ALU BYS GLA HOP HKA
                        ----------- ---- ---- ---- ---- ---- ----
                        200043 X X X X
                        200065 X X X[/highlight]
                        Olaf Helper

                        <Blog> <Xing>
                        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                        Comment

                        Working...
                        X