Announcement

Collapse
No announcement yet.

Distinct Befehl

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

  • Distinct Befehl

    Habe folgende Abfrage:

    Code:
     
    Select Distinct Printers.name, Printers.port
    FROM Variables INNER JOIN
    Fachbereiche ON SUBSTRING(Variables.Value, 34, 12) like Fachbereiche.Wert INNER JOIN Printers ON Printers.client_id = Variables.client_id
    group by Printers.port, Printers.name
    er sortiert mir jetzt nur die Zeilen aus bei denen name und port zur vorherigen Zeile gleich sind! Was ja auch logisch ist, da sich das Distinct auf alle Felder bezieht! Hat jemand eine Lösung das er die Zeilen schon aussortiert wenn nur der port gleich ist?

  • #2
    Hallo Oets,

    wozu ein DISTINCT, wenn Du eh ein GROUP BY machst? Das ist Doppelt-Gemoppelt.

    Das Einfachste: Printers.Name weglasssen.

    Andere Variante:

    [highlight=SQL]Select Printers.port, MAX(Printers.name)
    FROM Variables
    INNER JOIN Fachbereiche ON SUBSTRING(Variables.Value, 34, 12) like Fachbereiche.Wert
    INNER JOIN Printers ON Printers.client_id = Variables.client_id
    group by Printers.port[/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


    • #3
      Die doppelten werden jetzt schonmal aussortiert, dass ist gut! Jedoch was jetzt nicht mehr passt ist, das er die wo der Port und der Name gleich sind nicht mehr aussortiert :-) Problem quasi umgekehrt!
      Nen Distinct davor bringt auch keine Abhilfe!

      Comment


      • #4
        Hallo,
        Originally posted by Oets View Post
        ...Jedoch was jetzt nicht mehr passt ist, das er die wo der Port und der Name gleich sind nicht mehr aussortiert :-) ...
        Dafür gibts auch keine Bedingung! Du müßtest also zusätzlich eine Where-Klausel anhängen:
        [highlight=sql]
        ...
        where Printers.port != Printers.name
        Order by ...
        [/highlight]

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Nee jetzt haste mich falsch verstanden! Meinte das beispielsweise so:

          Name Port
          xyz 1234
          xyz 1234

          Die sortiert er jetzt nicht aus, sondern zeigt sie an!

          Comment


          • #6
            Hallo,

            na dann eben:
            [highlight=sql]
            ...
            where NOT (Printers.name = 'xyz'
            and Printers.port = 1234)
            ...
            [/highlight]

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Das war ja nur ein Beispiel, davon gibts noch zig andere Überschneidungen, die ich ja nicht alle aufführen kann im Where Befehl, da die sich auch immer wieder verändern!

              Comment


              • #8
                Hallo Oets,

                ich verstehe schon lange nicht mehr, was Du hast und was Du willst.

                Kannst Du nicht mal Beispiel-Datensätze und das erwünscht Ergebnis aufführen?
                Das würde es leichter machen anstatt das wir herum raten.
                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
                  Originally posted by O. Helper View Post
                  Hallo Oets,

                  ich verstehe schon lange nicht mehr, was Du hast und was Du willst.

                  Kannst Du nicht mal Beispiel-Datensätze und das erwünscht Ergebnis aufführen?
                  Das würde es leichter machen anstatt das wir herum raten.
                  Ok, dann werde ich mich wohl undeutlich ausgedrückt haben!
                  Dann probier ichs nochmal!

                  Probiere es jetzt ganz abstrakt zu halten:
                  Ich habe folgende Tabelle:

                  Auto PS
                  Audi 150
                  Audi 80
                  Audi 150
                  BMW 150
                  VW 200

                  Folgende Abfrage:
                  Select Distinct Auto, PS
                  From Autohaus

                  Dann bekomme ich als Ergebnis:
                  Audi 150
                  Audi 80
                  BMW 150
                  VW 200

                  Ein Datensatz (Audi 150 wird also aussortiert)

                  Was ich aber als Ergebnis will ist:
                  Audi 150
                  Audi 80
                  VW 200

                  Das heisst er soll jede PS Zahl nur einmal anzeigen! Ich weiss aber vorher nicht welche PS Zahl in der Tabelle steht, dass heisst ich kann in diesem Fall nicht vorher mit Where PS = 150 ist arbeiten!

                  Comment


                  • #10
                    Eine merkwürdige Anforderung ... aber der technische Teil ist zumindestens (jetzt) verständlich.

                    Hier eine mögliche Lösung dazu; unter MSSQL läuft es so, bei anderen musst Du es etwas abstrahieren.

                    [highlight=SQL]CREATE TABLE #Auto
                    (Marke varchar(20),
                    PS int);
                    GO

                    INSERT INTO #Auto VALUES('Audi', 150);
                    INSERT INTO #Auto VALUES('Audi', 80);
                    INSERT INTO #Auto VALUES('Audi', 150); -- absichtlich doppelt? Egal
                    INSERT INTO #Auto VALUES('BMW', 150);
                    INSERT INTO #Auto VALUES('VW', 200);
                    GO

                    SELECT DISTINCT PS, (SELECT TOP 1 Marke
                    FROM #Auto AS SUB
                    WHERE SUB.PS = MAIN.PS
                    ORDER BY Marke) AS DieErsteMarke
                    FROM #Auto AS MAIN
                    GO

                    DROP TABLE #Auto
                    GO[/Highlight]

                    Ergebnis:

                    [highlight=Code]PS DieErsteMarke
                    ----------- --------------------
                    80 Audi
                    150 Audi
                    200 VW

                    (3 Zeile(n) betroffen)
                    [/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


                    • #11
                      Mit dem doppelten Audi 150 war extra, damit man gesehen hat, was das Distinct macht!
                      Dankeschön! So eine Lösung brauchte ich

                      Comment

                      Working...
                      X