Announcement

Collapse
No announcement yet.

Probleme beim erstellen einer Auswertungstabelle

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

  • Probleme beim erstellen einer Auswertungstabelle

    Hallo, ich bin der Stephan und neu im Forum.

    Folgendes Problem versuche ich grade zu lösen.

    Ich erstelle grade eine Abfrage die mir zu einen bestimmten Kunden die Benutzer ausgibt, dazu sollen noch die
    Gruppen stehen in die der Benutzer sich befindet. Insgesamt verbinde ich 4 Tabellen.

    Code:
    SELECT [TabUser].[User_ID] as GenoID, 
    [TabUser].[user_name] as Benutzername,
    [TabUser].[user_address] as Email,
    [TabUser].[backup_name] as Vertretung,
    [TabGruppen].[group_name] as Benutzergruppe,
    [TabGruppen_rechte].[GrpLimit] as GruppenLimit,
    [TabUser].[PersLimit] as PersönlichesLimit 
    FROM [TabUser] 
    join [TabGruppen] 
    on [TabGruppen].User_ID=[TabUser].User_ID 
    join [TabGruppen_rechte] 
    on  [TabGruppen].group_name=[TabGruppen_rechte].group_name 
    join [TabKunde] 
    on [TabKunde].group_name=[TabGruppen_rechte].group_name 
    where [TabKunde].KundenNr = '1234'
    order by [User_ID]
    Da ein Benutzer sich in mehreren Gruppen befinden kann bekomme ich ihn öfter angezeigt.
    Dieses möchte ich aber verhindern.

    Statdessen soll er nur einmal angezeigt werden und die Gruppen sollen in einer Spalte
    hintereinander geschrieben werden, das gleiche gilt fürs GruppenLimit und PersöhnlichesLimit.

    Kann mir jemand helfen dies zu realisieren?

    gruss

    Stephan

  • #2
    siehe hier

    Comment


    • #3
      Danke für den Link, ich gucke mal ob es sich dadurch umsetzten läßt.

      gruss

      Stephan

      Comment


      • #4
        Hi danke nach einigen Versuchen konnte ich die Methode passend umschreiben.

        So siehts jetzt aus
        [highlight=sql]/****** Skript: Zeige alle Benutzer für ein Unternehmen ******/

        SELECT DISTINCT
        U.[Name] AS Benutzername,
        U.[ID] AS GenoID,
        U.[Vertretung] AS Vertretung,
        Benutzergruppen = (
        SELECT DISTINCT G.[Gruppen] + ' / '
        FROM [TestSystem1].[dbo].[TabGruppen] G
        INNER JOIN [TestSystem1].[dbo].[TabGrpLimit] Z
        ON G.[Gruppen] = Z.[Gruppen]
        WHERE U.[ID] = G.[ID]
        FOR XML PATH('')
        ),
        Gruppenlimit = (
        SELECT DISTINCT
        CONVERT(VARCHAR, Z.[GrpLimit]) + ' / '
        FROM [TestSystem1].[dbo].[TabGruppen] G
        INNER JOIN [TestSystem1].[dbo].[TabGrpLimit] Z
        ON G.[Gruppen] = Z.[Gruppen]
        WHERE U.[ID] = G.[ID]
        FOR XML PATH('')
        ),
        U.[PersLimit] AS PersönlichesLimit

        FROM [TestSystem1].[dbo].[TabBenutzer] U
        LEFT JOIN [TestSystem1].[dbo].[TabGruppen]
        ON [TestSystem1].[dbo].[TabGruppen].ID= U.ID

        JOIN [TestSystem1].[dbo].[TabGrpLimit]
        ON [TestSystem1].[dbo].[TabGruppen].Gruppen=
        [TestSystem1].[dbo].[TabGrpLimit].Gruppen

        JOIN [TestSystem1].[dbo].[TabUnternehmen]
        ON [TestSystem1].[dbo].[TabUnternehmen].Gruppen=
        [TestSystem1].[dbo].[TabGrpLimit].Gruppen

        WHERE [TestSystem1].[dbo].[ TabUnternehmen].UnternehmensNr = '0001'
        ORDER BY [Name]
        [/highlight]

        Jetzt habe ich nur noch 2 Probleme die zusammenhängen.

        1. Ich suche eine möglichkeit in der Spalte Benutzergruppen das Trennzeichen am schluss zu entfernen, in diesem Beispiel /.

        Denn derzeit sieht die ausgabe so aus Gruppe1 / Gruppe2 / (der Rot markierte Teil soll weg)

        2. Ich möchte anstatt des Trennzeichens einen Zeilenumbruch einfügen damit es in einer Excel Tabelle einfacher zu lesen ist.
        Daher auch der erste Punkt damit kein sinnloser Zeilenumbruch entsteht.

        EDIT
        In Excel bekomme ich Punkt 2 über suchen ersetzen durch Alt+010 hin da stören dann aber wieder die in Punkt 1 angesprochend
        Problemmatik da ich dann auch bei nur einer Gruppe einen Zeilenumbruch bekomme

        EDIT2
        Problem 1 habe ich jetzt über substrings gelöst bekommen

        gruss
        Stephan
        Zuletzt editiert von Stephan W.; 20.09.2012, 15:59.

        Comment


        • #5
          1. Ich suche eine möglichkeit in der Spalte Benutzergruppen das Trennzeichen am schluss zu entfernen, in diesem Beispiel /.
          2. Ich möchte anstatt des Trennzeichens einen Zeilenumbruch einfügen damit es in einer Excel Tabelle einfacher zu lesen ist.
          Daher auch der erste Punkt damit kein sinnloser Zeilenumbruch entsteht.
          zu 1) Mit dem Treenzeichen beginnen und dann Funktion STUFF (der Einfachheithalber)
          zu 2) einfach ersetzen mit REPLACE
          [HIGHLIGHT="SQL"] REPLACE (STUFF ((
          SELECT DISTINCT ' / ' + G.Gruppen
          FROM TestSystem1.dbo.TabGruppen G
          INNER JOIN TestSystem1.dbo.TabGrpLimit Z
          ON G.Gruppen = Z.Gruppen
          WHERE U.ID = G.ID
          FOR XML PATH('')
          ), 1, 1, ''), '/', CHAR(13)) AS Benutzergruppen, [/HIGHLIGHT]

          Comment


          • #6
            Hi,

            danke für die Hilfe.

            Wenn ich deine Version verwende verschwinden die Trennzeichen aber es findet kein Zeilenumbruch statt.

            Ich habe es jetzt über einen Substring gelöst der das Packet durchgeht, die länge holt er sich dadurch
            das er es nochmal durchgeht und 2 abzieht um das Trennzeichen am schluss zu löschen.

            Danach Exportiere ich es nach Excel und ersetzte das Trennzeichen durch Alt+010 um Zeilenumbrüche zu generieren.

            gruss
            Stephan

            Comment


            • #7
              Originally posted by Stephan W. View Post
              Wenn ich deine Version verwende verschwinden die Trennzeichen aber es findet kein Zeilenumbruch statt.
              Irrtum, die Ausgabe in SSMS ersetzt die Char(13) durch Blanks...

              [HIGHLIGHT="SQL"]SELECT CAST (
              (STUFF ((
              SELECT DISTINCT ' / ' + G.Gruppen
              FROM TestSystem1.dbo.TabGruppen G
              INNER JOIN TestSystem1.dbo.TabGrpLimit Z
              ON G.Gruppen = Z.Gruppen
              WHERE U.ID = G.ID
              FOR XML PATH('')
              ), 1, 1, '')
              ) AS XML AS Benutzergruppen[/HIGHLIGHT][HIGHLIGHT="SQL"]SELECT CAST (
              REPLACE (STUFF ((
              SELECT DISTINCT ' / ' + G.Gruppen
              FROM TestSystem1.dbo.TabGruppen G
              INNER JOIN TestSystem1.dbo.TabGrpLimit Z
              ON G.Gruppen = Z.Gruppen
              WHERE U.ID = G.ID
              FOR XML PATH('')
              ), 1, 1, ''), '/', CHAR(13))
              ) AS XML AS Benutzergruppen[/HIGHLIGHT]

              und Doppelklick auf die Ergebnisausgaben...

              Comment

              Working...
              X