tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
1003
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    TutorialKing TutorialKing ist offline Mitglied
    Registriert seit
    Jun 2005
    Beiträge
    24
    Hallo zusammen,

    ich arbeite mit Oracle 10.
    Ich habe ein Tabelle mit ca. 20 Spalten.

    Meine Abfrage bisher :

    Code :
    1
    2
    3
    4
    
    SELECT count(*),iso,name1,name2,nr1,nr2,nr3
    from tabelle
    GROUP BY iso,name1,name2,nr1,nr2,nr3
    HAVING COUNT(*) > 1

    Diese Abfrage zeigt mir alle doppelten Datensätze in meiner Tabelle an.

    Code :
    1
    2
    3
    4
    5
    
    count(*),iso,name1,name2,nr1,nr2,nr3
    2   439 nameX   nameL
    3   260 nameG   nameW
    7   439 nameR   nameT
    4   447 nameT   nameO

    Soweit so gut.

    Ich möchte aber alle Datensätze angezeigt bekommen. Das heisst die erste Zeile mit den 2 doppelten soll auch doppelt in der Ergebnismenge erscheinen.
    Zusätzlich sollen auch alle andere Spalten die in der Tabelle vorkommen name3,name4 etc. angezeigt werden.
    Wie könnte man das ganze verknüpfen ? Über die rowid z.b. geht ja leider nicht.
     

  2. #2
    Andi1982 Andi1982 ist offline Mitglied Bronze
    Registriert seit
    Nov 2004
    Beiträge
    48
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    SELECT (select count(*)
                 ,iso
                 ,name1
                 ,name2
                 ,nr1
                 ,nr2
                 ,nr3
              from tabelle
             GROUP BY iso,name1,name2,nr1,nr2,nr3
            HAVING COUNT(*) > 1) cnt
         ,iso
         ,name1
         ,name2
         ,nr1
         ,nr2
         ,nr3
      from tabelle
    where (select count(*)
                 ,iso
                 ,name1
                 ,name2
                 ,nr1
                 ,nr2
                 ,nr3
              from tabelle
             GROUP BY iso,name1,name2,nr1,nr2,nr3
            HAVING COUNT(*) > 1) >1

    Per Subselect?

    greez
     

  3. #3
    TutorialKing TutorialKing ist offline Mitglied
    Registriert seit
    Jun 2005
    Beiträge
    24
    Die Idee ist schonmal gut. Leider funktioniert dein Statement nicht. "Too many values"
    Und diese Abfrage berücksicht "nur" das alle doppelten Datensätze ausgegeben werden.
    Ich möchte aber noch weitere Spalten in der Tabelle mit ausgeben. zusatz3 zusatz4 usw.

    So sollte das Ergebnis aussehen :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    iso,name1,name2,nr1,nr2,nr3,zusatz3,zusatz4
    439 nameX   nameL   z01 z31 
    439 nameX   nameL   z02 z30
    260 nameG   nameW   z01 z30
    260 nameG   nameW   z02 z22
    260 nameG   nameW   z50 z35
    439 nameR   nameT   z01 z31
    439 nameR   nameT   z02 z32
    439 nameR   nameT   z22 z33
    439 nameR   nameT   z12 z34
    439 nameR   nameT   zdaten  z35
    439 nameR   nameT   zinhalt z36
    439 nameR   nameT   z7  z37
    447 nameT   nameO   z89 z38
    447 nameT   nameO   hu  z39
    447 nameT   nameO   ko  z40
    447 nameT   nameO   ok  z29
    Geändert von TutorialKing (23.10.08 um 08:20 Uhr)
     

  4. #4
    Andi1982 Andi1982 ist offline Mitglied Bronze
    Registriert seit
    Nov 2004
    Beiträge
    48
    dann lass im subselect die gruppierung weg und nur den count stehen, zusätzlich join deine tabelle gegen den subselect eins zu eins

    greez
     

  5. #5
    TutorialKing TutorialKing ist offline Mitglied
    Registriert seit
    Jun 2005
    Beiträge
    24
    dann lass im subselect die gruppierung weg und nur den count stehen, zusätzlich join deine tabelle gegen den subselect eins zu eins
    Könntest du mir dazu bitte ein Beispiel posten
     

  6. #6
    Andi1982 Andi1982 ist offline Mitglied Bronze
    Registriert seit
    Nov 2004
    Beiträge
    48
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    SELECT t1.iso
         , t1.name1
         , t1.name2
         , t1.nr1
         , t1.nr2
         , t1.nr3
         , sub.cnt
      from tabelle t1
         , (select count(*) cnt
                 ,iso
                 ,name1
                 ,name2
              from tabelle
             GROUP BY iso,name1,name2,nr1,nr2,nr3) sub
     where t1.iso   = sub.iso  
       and t1.name1 = sub.name1
       and t1.name2 = sub.name2
       and sub.cnt > 1;
    oder hilft dir evtl ein trivialer select *? Du verwirrst mich gerade.

    greez
     

  7. #7
    TutorialKing TutorialKing ist offline Mitglied
    Registriert seit
    Jun 2005
    Beiträge
    24
    Danke das hat schon genügt. Es hat funktioniert
     

  8. #8
    Jusage Jusage ist offline Rookie
    Registriert seit
    Jun 2008
    Beiträge
    7
    Ich muss das Thema leider nochmal aufleben lassen da ich vor dem gleichen Problem stehe aber auch mit diesem (bis jetzt definitiv Hilfreichstem Thread) nicht wirklich weiter komme... Ich arbeite ebenfalls mit Oracle 10.

    Also hier mal mein SQL Select:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    
    SELECT  t1.ID, 
            t1.FremdID, 
            t1.AccountID, 
            t1.Wert1, 
            t1.Wert2, 
            t1.Wert3, 
            t1.Wert4, 
            t1.Wert5, 
            t1.Wert6, 
            t1.Wert7, 
            t1.Wert8,
            t1.Wert9,
            sub.cnt1,
            sub.cnt2,
            sub.cnt3,
            sub.cnt4,
            sub.cnt5,
            sub.cnt6,
            sub.cnt7,
            sub.cnt8,
            sub.cnt9,
            sub.cnt10
    FROM tabelle t1
            , (SELECT COUNT(AccountID) cnt1, 
                      COUNT(Wert1) cnt2, 
                      COUNT(Wert2) cnt3, 
                      COUNT(Wert3) cnt4, 
                      COUNT(Wert4) cnt5, 
                      COUNT(Wert5) cnt6, 
                      COUNT(Wert6) cnt7, 
                      COUNT(Wert7) cnt8, 
                      COUNT(Wert8) cnt9, 
                      COUNT(Wert9) cnt10
               FROM  tabelle
               GROUP BY AccountID, 
                        Wert1, 
                        Wert2,
                        Wert3,
                        Wert4,
                        Wert5,
                        Wert6,
                        Wert7,
                        Wert8,
                        Wert9) sub
    WHERE t1.AccountID = sub.AccountID
      AND t1.Wert1     = sub.Wert1
      AND t1.Wert2     = sub.Wert2
      AND t1.Wert3     = sub.Wert3
      AND t1.Wert4     = sub.Wert4
      AND t1.Wert5     = sub.Wert5
      AND t1.Wert6     = sub.Wert6
      AND t1.Wert7     = sub.Wert7
      AND t1.Wert8     = sub.Wert8
      AND t1.Wert9     = sub.Wert9
      AND sub.cnt1 > 1
      AND sub.cnt2 > 1
      AND sub.cnt3 > 1
      AND sub.cnt4 > 1
      AND sub.cnt5 > 1
      AND sub.cnt6 > 1
      AND sub.cnt7 > 1
      AND sub.cnt8 > 1
      AND sub.cnt9 > 1
      AND sub.cnt10 > 1;


    So mein Problem ist wie folgt das ich manche Einträge doppelt habe, bis auf gewisse Felder die aufgrund von Autoincrement usw absolut Unique sind. Z.B. die Felder ID und FremdID. Darum dürfen die eben nicht in der GroupBy auftauchen da er sonst sagt es gab keine doppelten... Warum auch immer.

    Das obige Beispiel ist das was ich aus dem gebastelt habe was ich hier gefunden habe, leider sagt er mir da folgenden fehler:

    "SUB"."WERT9": invalid identifier

    Vielleicht kannt mir ja jemand von euch helfen wie ich es hinkriege...
    Eine Ausgabe derer die Doppelt sind hab ich bereits hingekriegt, jedoch eben Gruppiert, ich bräuchte eine in der die ID und FremdID mit drin stehen damit ich genau weiss welcher Datensatz wirklich doppelt ist.

    Hier mal ein beispiel der Tabelle:
    Code :
    1
    2
    3
    4
    5
    6
    
    ID   FremdID     AcountID   Wert1   Wert2   Wert3   Wert4   Wert5 etc
    1    100         2201       2000    YES     77      22      1
    2    100         2201       2000    YES     77      22      1
    3    200         2201       2000    YES     77      22      1
    4    100         1507       2000    NO      77      22      2
    5    150         2201       2000    YES     77      22      2


    Hier sollte er mir jetzt wenn es möglich ist einmal die spalte mit der ID 1 und einmal die mit der ID 2 und einmal die mit der ID 3 ausgeben da diese 3 absolut Identisch sind bis auf die ID und FremdID, welche ich zwar unbedingt brauche um zu wissen welche Einträge nun doppelt sind, aber im Count und GroupBy nicht auftauchen dürfen.

    Ich danke schonmal für die mühe und hoffe hier kann mir jemand weiterhelfen...
    Geändert von Jusage (27.07.11 um 08:57 Uhr)
     

  9. #9
    Jusage Jusage ist offline Rookie
    Registriert seit
    Jun 2008
    Beiträge
    7
    Hat niemand hier nen hilfreichen Ansatz was genau ich falsch mache?
     

Ähnliche Themen

  1. Nur bestimmte Spalten im Silverlight-Datagrid anzeigen
    Von orion555 im Forum .NET WPF & Silverlight
    Antworten: 1
    Letzter Beitrag: 05.09.10, 22:52
  2. Doppelte Spalten filtern
    Von trench140 im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 14.06.08, 13:17
  3. Wie vermeide ich Doppelte Spalten?
    Von dsolianyi im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 06.05.07, 21:20
  4. Bestimmte Spalten zählen, aber wie?
    Von KenKo im Forum PHP
    Antworten: 2
    Letzter Beitrag: 30.09.05, 09:36
  5. Abfrage doppelte Datensätze unter EInbezug mehrer Spalten
    Von mstrauss im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 25.02.05, 10:03