MySQL Abfrage mit kumulierten Werten

didi577

Bekanntes Mitglied
Hi,

ich habe eine Abfrage die mir die Summe aus 52 Spalten liefert:
Java:
public int loadServices(int employe, int year, int week) {

       PreparedStatement pst = null;
       ResultSet rs = null;
       int sumEmp = 0;
       
       String query = "SELECT services_id, employe, year, (kw1 + kw2 + kw3 + kw4 + kw5 + kw6 + kw7 + kw8 + kw9 + kw10 + kw11 + kw12 + kw13 + kw14 + kw15 + kw16 + kw17 + kw18 + kw19 + kw20 + kw21 + kw22 + kw23 + kw24 + kw25 + kw26 + kw27 + kw28 + kw29 + kw30 + kw31 + kw32 + kw33 + kw34 + kw35 + kw36 + kw37 + kw38 + kw39 + kw40 + kw41 + kw42 + kw43 + kw44 + kw45 + kw46 + kw47 + kw48 + kw49 + kw50 + kw51 + kw52) AS sumEmp FROM services WHERE employe =? AND year =?";
       // int i = 1;
       try {
           pst = con.prepareStatement(query);
           pst.setInt(1, employe);
           pst.setInt(2, year);
           rs = pst.executeQuery();
           while (rs.next()) {
              

               sumEmp = rs.getInt("sumEmp");

           }

       } catch (SQLException e) {
           e.printStackTrace();

       } finally {
           if (rs != null && pst != null) {
               try {
                   rs.close();
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }

       return sumEmp;
   }
ich möchte diese Anfrage so modifizieren dass ich jederzeit die Spalten kw1 - kw8 oder kw1 - kw34 also kumulierte Werte von kw1 bis kwX. den Wert X gebe ich als Parameter "int week" mit. ich habe hier noch wenig Erfahrung. wer kann mir helfen?
 

mrBrown

Super-Moderator
Mitarbeiter
ich würde die DB anders aufbauen, und die Wochen (kw1 meint doch Kalenderwoche 1?) in einer eigenen Tabelle speichern. Summieren musst du dann über mehrere Zeilen, das dürfte deutliche einfacher sein.
 

didi577

Bekanntes Mitglied
ja kw sind Kalenderwochen

ich habe bislang lediglich die 52 kw, eine MitarbeierID und ein Jahr als Spalten in der Tabelle. Jede Zeile steht also für einen Mitarbeiter in einem Jahr. Was schlägst du genau vor?
 

Thallius

Top Contributor
Spaltennamen mit Zahlen sind IMMER ein Zeichen, dass Dein DB Format falsch ist.

Wie Brown schon beschreibt du musst deine Kalenderwochen in eine eigene Tabelle auslagern und dann mit JOINS arbeiten.
 

mrBrown

Super-Moderator
Mitarbeiter
Nein!
Eine Tabelle "Woche", in der alle Wochen liegen. Die enthält dann jeweils die Wochennummer, eine Referenz auf den Mitarbeiter, die Jahreszahl und die relevanten Daten für die Woche.

Alles, was du zählen kannst, sollten Zeilen sein, nicht Spalten und erst recht nicht Tabellen.
 

didi577

Bekanntes Mitglied
ok...
Spalte Woche | Spalte Mitarbeiter | Spalte Jahr | Spalte Daten
1 5 2017 2
1 4 2017 3
2 5 2017 0
2 4 2017 0
3 4 2017 4
3 5 2017 1
4
5
6
...

habe ich so richtig verstanden?
 

didi577

Bekanntes Mitglied
jetzt habe ich doch noch mal eine Frage...

Spalte Woche | Spalte Mitarbeiter | Spalte Jahr | Spalte Daten
1 5 2017 2
1 4 2017 3
2 5 2017 0
2 4 2017 0
3 4 2017 4
3 5 2017 1
4
5
6
...

wie bekomme ich aus der oben beschriebenen Spalte "Daten" die Werte per Abfrage in meine Tabelle ? ich habe 52 Spalten in der tableview und jede wird aus der DB Spalte "Daten" gefüllt. in der tableview sollen die Daten der Mitarbeiter je Woche geladen werden
das ist der Code zur Abfrage:
Java:
public void loadServices(List<Service> serviceList,
           List<Boolean> booleanList, int employe, int year) {

       PreparedStatement pst = null;
       ResultSet rs = null;

       String query = "SELECT services_id, week, employe, year, days FROM services WHERE employe =? AND year =? AND week =?";

       try {
           pst = con.prepareStatement(query);
           pst.setInt(1, employe);
           pst.setInt(2, year);
           rs = pst.executeQuery();
           while (rs.next()) {
               
               

               Service serviceObject = new Service();
               serviceObject.setServices_id(rs.getInt("services_id"));
               serviceObject.setWeek(rs.getInt("week"));
               serviceObject.setEmploye(rs.getInt("employe"));
               serviceObject.setYear(rs.getInt("year"));
               serviceObject.setDays(rs.getInt("days"));
                               
               serviceList.add(serviceObject);

           }

       } catch (SQLException e) {
           e.printStackTrace();

       } finally {
           if (rs != null && pst != null) {
               try {
                   rs.close();
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   }
der Aufruf:
Java:
mysql.loadServices(serviceList, booleanList, lvEmploye
               .getSelectionModel().getSelectedItem().getEmployes_id(),
               cbYearService.getValue());
die Klasse Service:
Java:
public class Service {

   private int services_id;
   private int week;
   private int employe;
   private int year;
   private int days;

   public Service() {

   }

   public int getServices_id() {
       return services_id;
   }

   public void setServices_id(int services_id) {
       this.services_id = services_id;
   }

   public int getEmploye() {
       return employe;
   }

   public void setEmploye(int employe) {
       this.employe = employe;
   }

   public int getYear() {
       return year;
   }

   public void setYear(int year) {
       this.year = year;
   }

   public int getWeek() {
       return week;
   }

   public void setWeek(int week) {
       this.week = week;
   }

   public int getDays() {
       return days;
   }

   public void setDays(int days) {
       this.days = days;
   }

}
so habe ich es bisher nur hinbekommen dass in der tableview in jeder Spalte der Wert der 1.Spalte steht

wer kann mir hier weiter helfen?
 

mrBrown

Super-Moderator
Mitarbeiter
Hast du ein Problem mit dem Laden der Daten oder ein Problem mit dem Anzeigen?

Generell wäre es sinnvoll, ein Objekt zu haben, was eine Spalte in der Tabelle darstellt.
Wenn ich das grad richtig sehe, wäre das ein Objekt, was die Mitarbeiterdaten, das Jahr und eine Liste von Wochen (die jeweils die entsprechenden Daten für eine Woche enthalten) enthält?
 

didi577

Bekanntes Mitglied
er lädt momentan in jede Spalte der tableview die DB Spalte days rein, also 52 Einträge in jeder Spalte der tableview

es sollen je Spalte nur die Daten der Woche angezeigt werden. Also ein int je Spalte. Die Mitarbeiter ID übergebe ich weil ich die Mitarbeiter in einer ListView selektiere und zu diesem Mitarbeiter die tableview angezeigt wird. Das Jahr wird auch als Parameter übergeben da ich die tableview jahresweise lade.

die Wochen sind in der DB als int gespeichert 1 - 52, das Jahr als int 2016 - 2019, die Mitarbeiter ID als int und die Daten als int 1 - 5

die Table Columns der tableview sind mit kw1Column - kw52Column benannt
 

mrBrown

Super-Moderator
Mitarbeiter
er lädt momentan in jede Spalte der tableview die DB Spalte days rein, also 52 Einträge in jeder Spalte der tableview
Was sind denn jetzt plötzlich "days"?

es sollen je Spalte nur die Daten der Woche angezeigt werden. Also ein int je Spalte. Die Mitarbeiter ID übergebe ich weil ich die Mitarbeiter in einer ListView selektiere und zu diesem Mitarbeiter die tableview angezeigt wird. Das Jahr wird auch als Parameter übergeben da ich die tableview jahresweise lade.

die Wochen sind in der DB als int gespeichert 1 - 52, das Jahr als int 2016 - 2019, die Mitarbeiter ID als int und die Daten als int 1 - 5

die Table Columns der tableview sind mit kw1Column - kw52Column benannt
Ich werd aus dem Teil nicht schlau - wie sieht denn jetzt dein Datenbank-Schema aus und wie brauchst du das in der Anwendung?

Hast du in deiner Anwendung schon ein passendes Datenmodell oder gibt es nur das auf der vorherigen Seite?
 

didi577

Bekanntes Mitglied
Hi,

wie sieht denn jetzt dein Datenbank-Schema aus
upload_2017-7-15_9-22-40.png
Was sind denn jetzt plötzlich "days"?
days sind die Daten
Hast du in deiner Anwendung schon ein passendes Datenmodell oder gibt es nur das auf der vorherigen Seite?
ja nur das der vorigen Seite

in der controller class habe ich dazu diesen code:
Java:
@FXML
   private TableColumn<Service, Integer> kw1Column, kw2Column, kw3Column,
           kw4Column, kw5Column, kw6Column, kw7Column, kw8Column, kw9Column,
           kw10Column, kw11Column, kw12Column, kw13Column, kw14Column,
           kw15Column, kw16Column, kw17Column, kw18Column, kw19Column,
           kw20Column, kw21Column, kw22Column, kw23Column, kw24Column,
           kw25Column, kw26Column, kw27Column, kw28Column, kw29Column,
           kw30Column, kw31Column, kw32Column, kw33Column, kw34Column,
           kw35Column, kw36Column, kw37Column, kw38Column, kw39Column,
           kw40Column, kw41Column, kw42Column, kw43Column, kw44Column,
           kw45Column, kw46Column, kw47Column, kw48Column, kw49Column,
           kw50Column, kw51Column, kw52Column;

private ObservableList<Service> services;

List<Service> serviceList = new ArrayList<>();

dann 52 x

Java:
kw1Column
               .setCellValueFactory(new PropertyValueFactory<Service, Integer>(
                       "days"));
       kw2Column
               .setCellValueFactory(new PropertyValueFactory<Service, Integer>(
                       "days"));

       kw3Column
               .setCellValueFactory(new PropertyValueFactory<Service, Integer>(
                       "days"));

...

hier lade ich die Tabelle:
Java:
mysql.loadServices(serviceList, booleanList, lvEmploye
               .getSelectionModel().getSelectedItem().getEmployes_id(),
               cbYearService.getValue());
       services = FXCollections.observableArrayList(serviceList);
       tableViewService.setItems(getservices());
       tableViewService1.setItems(getservices());
       tableViewService2.setItems(getservices());
       tableViewService3.setItems(getservices());

ich hoffe mein Anliegen is jetzt etwas durchsichtiger geworden: der Wert der Spalte "days" soll beim entsprechenden Mitarbeiter in diesen Tabellen angezeigt werden:
upload_2017-7-15_9-37-29.png

Danke schon mal für deine Unterstützung bis hierhin
 

Thallius

Top Contributor
Wenn für jeden Mitarbeiter 52 Einträge in der DB sind und es dort kein Löcher gibt, dann kannst du einfach mit einem LEFT JOIN arbeiten und bei der Anzeige die Werte entsprechend der Liste aus indes*52 holen. Also

Code:
SELECT name, days FROM daystable LEFT JOIN employe ON (employe.id = days.employe) ORDER BY employe.name, week ASC

Dann hast du eine Liste mit immer 52 Einträgen für jeden Mitarbeiter und gibst in den entsprechenden Methoden des Tablemodels eben

Code:
int rowCount()
{
    return list.size() / 52;
}
int valueForRow(row, column)
{
    row = row * 52;
    if(column == 0)
         return list.get(row).name;
    else
    {
          column--;
         return list.get(row+column).days;
    }    
}

Gruß

Claus
 

Meniskusschaden

Top Contributor
die Wochen sind in der DB als int gespeichert 1 - 52, das Jahr als int 2016 - 2019, die Mitarbeiter ID als int und die Daten als int 1 - 5

die Table Columns der tableview sind mit kw1Column - kw52Column benannt
Nur mal so nebenbei als Hinweis, weil es sich hier so auf die 52 fokussiert: Ein Jahr hat gelegentlich auch 53 Wochen. Außerdem beginnt es nicht unbedingt mit KW1, kann aber durchaus damit enden.
 

didi577

Bekanntes Mitglied
Danke ich werde versuchen es so umzusetzen.

Das mit den 53 Wochen ist mir bewusst aber die Werte der ersten und letzten Woche sind für diesen zweck unwesentlich
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
L JSONArray/JSONObject MySQL-Servlet Abfrage Datenbankprogrammierung 2
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
S MySQL Abfrage: Wenn Feld leer, alles anzeigen Datenbankprogrammierung 5
J where Abfrage auf ein mysql date feld Datenbankprogrammierung 5
S MySQL Abfrage in showInputDialog laden Datenbankprogrammierung 6
S MySQL: Abfrage auf 2 Tabellen durch join Datenbankprogrammierung 5
S Mysql abfrage über 2 tabellen. Datenbankprogrammierung 10
V MySql abfrage funktioniert auf einmal nicht mehr Datenbankprogrammierung 2
S Problem bei MySql abfrage Datenbankprogrammierung 11
F Abfrage eines DB Feldes aus einer mySQL Datenbank Datenbankprogrammierung 2
S MySQL-Abfrage unter java funktioniert nicht! Datenbankprogrammierung 4
P zu langsame mySQL Abfrage Datenbankprogrammierung 8
A java & mysql abfrage mit variablen auswerten, wie? Datenbankprogrammierung 8
R Problem mit MySQL-Abfrage Datenbankprogrammierung 36
M [MYSQL] Problem mit Connection und Abfrage Datenbankprogrammierung 6
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
X MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern? Datenbankprogrammierung 9
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL MySQL DATETIME-Import Datenbankprogrammierung 9
P MySQL Connection Global Datenbankprogrammierung 13
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
M In MySql Datenbank schreiben Datenbankprogrammierung 6
D mySQL Timestamp in RegularTimePeriod bzw Second Datenbankprogrammierung 3
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
windl MySQL und HSQLDB Datenbankprogrammierung 4
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
F BPlaced MySql Datenbank ansprechen Datenbankprogrammierung 5
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
M MySQL Datenbank durchsuchen Datenbankprogrammierung 5
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben