Announcement

Collapse
No announcement yet.

Statement mit split / substring

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

  • Statement mit split / substring

    hey leute!

    ich hab eine tabelle mit mehreren mobilfunkbetreibern! darunter sind z.b. welche aus ägypten, deutschland, england, ...

    ich würde gerne pro land die daten ausgeben (funktioniert ganz gut mit einem php-skript)!

    hätte das ganze aber gerne in einem sql-statement! das problem ist nur, dass ein einfach group by nicht funktioniert, weil ich pro land mehrere netzbetreiber haben kann!

    also z.b.

    ägypten - vodafone
    ägypten - mobinil
    deutschland - e-plus
    deutschland - o2

    jetzt müsste ich für ein group by pro land also im statement den string bei " - " splitten und mit dem ersten teil gruppieren (mach ich jetzt in PHP so)

    meine frage: geht sowas im statement?

    lg,
    alex

  • #2
    Originally posted by leuchtdiode View Post
    hey leute!

    ich hab eine tabelle mit mehreren mobilfunkbetreibern! darunter sind z.b. welche aus ägypten, deutschland, england, ...

    ich würde gerne pro land die daten ausgeben (funktioniert ganz gut mit einem php-skript)!

    hätte das ganze aber gerne in einem sql-statement! das problem ist nur, dass ein einfach group by nicht funktioniert, weil ich pro land mehrere netzbetreiber haben kann!

    also z.b.

    ägypten - vodafone
    ägypten - mobinil
    deutschland - e-plus
    deutschland - o2

    jetzt müsste ich für ein group by pro land also im statement den string bei " - " splitten und mit dem ersten teil gruppieren (mach ich jetzt in PHP so)

    meine frage: geht sowas im statement?
    Falls das das gewünschte Ergebnis ist:
    [HIGHLIGHT="Result"]Land Comps
    -------------------- --------------------------------------------------
    ägypten vodafone,mobinil
    deutschland e-plus,o2[/HIGHLIGHT]
    könntest Du das mit folgendem Statement machen
    [HIGHLIGHT="SQL"] BEGIN TRAN;
    WITH Data AS
    ( SELECT 'ägypten - vodafone' AS M
    UNION ALL SELECT 'ägypten - mobinil' AS M
    UNION ALL SELECT 'deutschland - e-plus' AS M
    UNION ALL SELECT 'deutschland - o2' AS M
    )
    , split AS
    ( SELECT SUBSTRING (M, 1, CHARINDEX (' - ', M, 1) -1) As Land
    , SUBSTRING (M, CHARINDEX (' - ', M, 1) +3 , 100) AS COmp
    FROM Data
    )
    SELECT S1.Land, STUFF (x.Comps, 1, 1, SPACE(0)) AS Comps
    FROM split AS S1
    CROSS APPLY (SELECT Y.Comps AS [text()]
    FROM (
    SELECT S2.Land
    , ','+ S2.COmp AS Comps
    FROM Split AS S2
    WHERE S1.Land = S2.Land
    ) AS Y
    ORDER BY Y.Land
    FOR XML PATH ('')
    ) AS X (Comps)
    GROUP BY S1.Land, STUFF (x.Comps, 1, 1, SPACE(0));
    ROLLBACK;[/HIGHLIGHT]

    Comment


    • #3
      ok danke!

      im prinzip reichen mir die werte aus der spalte "land"! und dann möchte ich pro land eben bestimmte auswertungen!

      werd mir das mal anschauen

      danke!

      EDIT: funktioniert mit dem substring ganz gut, jedoch das -1 will er nicht! da schreibt er mir, dass die parameter von substring nicht übereinstimmen...
      Zuletzt editiert von leuchtdiode; 25.08.2009, 09:13.

      Comment


      • #4
        Originally posted by leuchtdiode View Post
        ok danke!

        im prinzip reichen mir die werte aus der spalte "land"! und dann möchte ich pro land eben bestimmte auswertungen!

        werd mir das mal anschauen

        danke!

        EDIT: funktioniert mit dem substring ganz gut, jedoch das -1 will er nicht! da schreibt er mir, dass die parameter von substring nicht übereinstimmen...
        falsch abgeschrieben?
        denn Substing hat 3 Parameter...

        SUBSTRING (M, 1, CHARINDEX (' - ', M, 1) -1)
        1. Parameter: M
        2. Parameter: 1
        3. Parameter: CHARINDEX (' - ', M, 1) -1

        Comment


        • #5
          Originally posted by ebis View Post
          falsch abgeschrieben?
          denn Substing hat 3 Parameter...

          SUBSTRING (M, 1, CHARINDEX (' - ', M, 1) -1)
          1. Parameter: M
          2. Parameter: 1
          3. Parameter: CHARINDEX (' - ', M, 1) -1
          ja stimmt... aber habs nochmal genau überprüft und habs sogar mit einer zusätzlichen klammer probiert: (CHARINDEX(' - ', M, 1)-1)

          Comment

          Working...
          X