# Ausgabe unterschiedlicher Inhalte



## pjohm (24. Mai 2015)

Servus zusammen,
ich bin neu hier und benötige direkt eure Hilfe.

Ich habe folgendes Problem:
Für eine Projektarbeit soll ich eine Lagerübersicht aus einer SQL-DB erstellen, d.h. zuerst soll das Lager ausgegeben werden, und darunter die Lagerfächer des jeweiligen Lagers. Wenn ein Lager mehrere Lagerfächer hat, sollen diese alle unter dem Lager ausgegeben werden, und dann weiter zum nächsten Lager,also in etwa so:

Lager1 || Ort1 || PLZ1
Lagerfach1
Lagerfach2
Lagerfach3
Lager2 || Ort2 || PLZ2
Lagerfach4
Lagerfach5
usw.

Meine Ausgabe sieht im Moment leider in etwa so aus:
Lager1 || Ort1 || PLZ1
Lagerfach1
Lager1 || Ort1 || PLZ1
Lagerfach2
Lager1 || Ort1 || PLZ1
Lagerfach3
usw.

Hier mein Code, irgendwie will das nicht so wie ich will 
Vielleicht erkennt ihr ja woran's liegt.

```
try {            Statement stmt;
            stmt = con.createStatement();
            ResultSet rs;
            rs = stmt
                    .executeQuery("SELECT * FROM Lager LEFT JOIN Lagerfach ON Lager.LagerNr=Lagerfach.LagerNr");


            while (rs.next()) {
                System.out.println(rs.getString("Lager.LagerNr")+ " "+rs.getString("Ort")+" "+rs.getString("PLZ")+"\n   "+rs.getString("LagerfachNr")+", Gangnr.:"+rs.getString("GangNr")+", RegalNr.:"+rs.getString("RegalNr")+", mit: "+rs.getString("Volumen")+" cbm."  );
                int lnr=rs.getInt("Lagerfach.LagerNr");
                if(lnr!=rs.getInt("Lagerfach.LagerNr")+1){
                    
                    System.out.println(rs.getString("LagerfachNr")+", Gangnr.:"+rs.getString("GangNr")+", RegalNr.:"+rs.getString("RegalNr")+", mit: "+rs.getString("Volumen")+" cbm.");
                }
                
                
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
```

Danke schon mal
pjohm


----------



## Flown (24. Mai 2015)

Das hört sich stark nach dem SQL-Operator "group by" an: Hier ein group by mit mehreren Columns: SO.


----------



## pjohm (24. Mai 2015)

Danke für die schnelle Antwort. 
Hab das gerade probiert, aber hilft leider nicht. Wenn ich das über die Spalten Lager.LagerNr, Ort, PLZ gruppiere, dann wird je Lager immer nur noch das erste Lagerfach angezeigt.


----------



## strußi (24. Mai 2015)

zeile 9 wird immer ausgegeben, du kannst mit einer if-abfrage testen ob dein String ein lager oder ein lagerfach ist. wenn es ein lager ist,  dann gib das lager aus, sonst das lagerfach

```
while( rs.next()){
 String firstCol =rs.getNString( 1);
        if( !firstCol.contains( "fach")){
            //lager ausgeben
        } else{
            //lagerfach ausgeben
        }
}
```
so sollte es gehen


----------



## pjohm (24. Mai 2015)

Hi
Danke, aber leider funktioniert das auch nicht. So wird mir 
Lager1
Lagerfach1
Lager1

Lager1
Lagerfach2
Lager1
usw. 

ausgegeben.

Wenn ich Zeile 9 auskommentiere werden mir nur die Lager ohne Fächer ausgegeben, allerdings auch doppelt und dreifach.


----------



## strußi (24. Mai 2015)

du brauchst eine abfrage, die testet, welchen inhalt dein aktuelles rs.next() hat, wenn es ein lager ist, die lager ausgabe, wenn es ein lagerfach ist, die lagerfachausgabe.


----------



## pjohm (28. Mai 2015)

ja, aber das problem ist, dass mir dann alle lager nacheinander ausgegeben werden. außerdem sind immer noch die duplikate drin.

mein gedanke war, das über die lagernummer zu machen, da die ja in beiden tabellen hinterlegt ist.also die lagernummern zu vergleichen, und wenn die gleich sind, dann sollen die lagerfächer dazu ausgegeben werden. aber das funktioniert leider auch nicht so wie ich mir das gedacht hab.


----------



## strußi (28. Mai 2015)

wie sieht überhaupt der inhalt von rs.next() aus? wenn du den mal zeigen könntest, kann man anhand der daten sich überlegen wie man es ausgeben könnte


----------



## pjohm (28. Mai 2015)

Das ist der Inhalt vom ResultSet. Lagernummer kommt zwei Mal vor, einmal als Primärschlüssel in der Tabelle Lager, und als Fremdschlüssel in Lagerfach.

Und das Ziel ist es, dass jedes Lager nur einmal angezeigt wird, aber dazu jedes Lagerfach ausgegeben wird.

Also z.B. 
1 | Ulm | 89075
   UL105 | 1 | 5 | 1.50
   UL203 | 2 | 3 | 2.10


----------

