Gast King555 Geschrieben 12. August 2002 Geschrieben 12. August 2002 Was ist an folgender SQL Anweisung falsch? Ich finde einfach keinen Fehler. Wenn ich den ersten Block wegmache, ist der Fehler laut Meldung übrigens immer noch in Zeile 1. select Datum, Stunden, 0 Ausfallstunden from az_taeglich where PERS_ID= 4 UNION ALL select Ausfalltag, 0.0 Arbeitsstunden, Ausfallstunden from Ausfallzeiten where PERS_ID= 4 UNION ALL select Datum, 0.0 Arbeitsstunden, 7 Ausfallstunden from Feiertage where Ausfallstunden = 8 UNION ALL select Datum, 0.0 Arbeitsstunden, 3.5 Ausfallstunden from Feiertage where Ausfallstunden = 4 Zitieren
Gast King555 Geschrieben 12. August 2002 Geschrieben 12. August 2002 Wenn ich hinter jede WHERE Bedingung ein Semikolon mache, dann kommt folgender Fehler: Parsing Error Invalid statement on line 5: UNION ALL Der Fehler liegt in folgender Anweisung: select Ausfalltag, 0.0 Arbeitsstunden, Ausfallstunden from Ausfallzeiten where PERS_ID= 4; Zitieren
Darth_Zeus Geschrieben 12. August 2002 Geschrieben 12. August 2002 mit 'Ausfallstunden' bist du dir aber sicher? Schreibweise, Typ, usw.. Zitieren
Gast King555 Geschrieben 12. August 2002 Geschrieben 12. August 2002 Das Feld wurde wie folgt angelegt: Ausfallstunden integer not null Zitieren
JayN Geschrieben 12. August 2002 Geschrieben 12. August 2002 Original geschrieben von King555 Wenn ich hinter jede WHERE Bedingung ein Semikolon mache, dann kommt folgender Fehler: Parsing Error Invalid statement on line 5: UNION ALL Der Fehler liegt in folgender Anweisung: select Ausfalltag, 0.0 Arbeitsstunden, Ausfallstunden from Ausfallzeiten where PERS_ID= 4; Nicht hinter jede, sondern nur hinter die letzte... JayN Zitieren
Gast King555 Geschrieben 12. August 2002 Geschrieben 12. August 2002 Dann kommt wieder folgende Fehlermeldung: Dynamic SQL Error SQL error code = -104 Invalid Command Data type unknown on line 1 : select Datum, Stunden, 0 Ausfallstunden from az_taeglich where PERS_ID= 4 UNION ALL select Ausfalltag, 0 Arbeitsstunden, Ausfallstunden from Ausfallzeiten where PERS_ID= 4 UNION ALL select Datum, 0 Arbeitsstunden, 7 Ausfallstunden from Feiertage where Ausfallstunden = 8 UNION ALL select Datum, 0 Arbeitsstunden, 3.5 Ausfallstunden from Feiertage where Ausfallstunden = 4 Zitieren
Darth_Zeus Geschrieben 12. August 2002 Geschrieben 12. August 2002 Was bezweckst du mit 0 Ausfallstunden? Zitieren
JayN Geschrieben 12. August 2002 Geschrieben 12. August 2002 Könntest Du vielleicht die Tabellen-/Datenbankstruktur mit den jeweiligen Datentypen mal posten? JayN Zitieren
Gast King555 Geschrieben 12. August 2002 Geschrieben 12. August 2002 Wenn ich mehrere Tabellen mit UNION ALL zusammenführen möchte, müssen alle Felder der Tabellen doch gleich sein (oder nicht?). Da die Tabelle mit den Arbeitsstunden ja keine Ausfallstunden enthält (und andersrum), muss ich da halt als Default Wert 0 nehmen. Als ich das mit den Feiertagen (die zwei Blöcke unten) noch nicht hatte, hat es übrigens noch bestens funktioniert! Hier die Tabellen: create table Ausfallzeiten ( ID integer not null, Pers_ID integer not null, Grund varchar(20) not null, Ausfalltag date not null, Ausfallstunden integer not null, primary key (ID) ); create table Arbeitsaufwand ( ID integer not null, Pers_ID integer not null, Projekt_ID integer not null, Taetigkeit_ID integer not null, Kunden_ID integer, Beschreibung varchar(255), Datum date not null, von char(5) not null, bis char(5) not null, Arbeitsanteil double precision not null, Aufwand double precision not null, Fakturiert double precision, primary key (ID), foreign key (Projekt_ID) references Projekte, foreign key (Pers_ID) references Personen, foreign key (Taetigkeit_ID) references Taetigkeitsarten ); create table Feiertage ( Datum date not null, Ausfallstunden integer not null, Beschreibung varchar(20), primary key (Datum) ); Dann gibt's da noch eine View, die wurde so erstellt: create view az_taeglich (Pers_ID, Datum, Anfang, Ende, Stunden) as select Pers_ID, Datum, Min(von), Max(bis), Sum(Aufwand) from Arbeitsaufwand group by Pers_ID, Datum; Zitieren
Gast King555 Geschrieben 13. August 2002 Geschrieben 13. August 2002 Ich habe immer noch keine Lösung gefunden, ihr ja scheinbar auch nicht. Daher poste ich jetzt nochmal was, was vielleicht bei einer Lösung des Problems hilft. So sah die Anweisung aus, bevor ich was dran geändert habe, diese Anweisung funktionierte bestens: select Datum, Stunden, 0 Ausfallstunden from az_taeglich where PERS_ID= 4 UNION ALL select Ausfalltag, 0.0 Arbeitsstunden, Ausfallstunden from Ausfallzeiten where PERS_ID= 4 UNION ALL select Datum, 0.0 Arbeitsstunden, Ausfallstunden from Feiertage Die aktuelle Anweisung habe ich ja bereits gepostet. Zitieren
Darth_Zeus Geschrieben 13. August 2002 Geschrieben 13. August 2002 select Datum, 0.0 Arbeitsstunden, 7 Ausfallstunden from Feiertage where Ausfallstunden = 8 7 ausfallstunden 8 ausfallstunden ???? in einer anweisung???? mag sich da der fehler verstecken???? Zitieren
Gast King555 Geschrieben 13. August 2002 Geschrieben 13. August 2002 Original geschrieben von Darth_Zeus 7 ausfallstunden 8 ausfallstunden ???? in einer anweisung???? mag sich da der fehler verstecken???? Keine Ahnung, das frage ich ja euch. Ich möchte überall da, wo eine "8" bei den Ausfallstunden steht, eine "7" einlesen. Das möchte ich erreichen. Diese Feiertagstabelle enthält nämlich für jeden Feiertag 8, bzw. 4 Ausfallstunden. Da ich aber nur 7 Stunden täglich arbeiten muss, würde durch die 8 meine Gesamtauswertung verfälscht. Daher möchte ich alle Datensätze mit Ausfallstunden = 8 als 7 Ausfallstunden einlesen. Falls es so nicht geht, wie ich es gemacht habe, wie geht es dann? Zitieren
Darth_Zeus Geschrieben 13. August 2002 Geschrieben 13. August 2002 sags halt gleich.......... UPDATE Ausfallzeiten SET Ausfallstunden = 7 WHERE Ausfallstunden = 8 AND Pers_ID = 4; Fertig Zitieren
Gast King555 Geschrieben 13. August 2002 Geschrieben 13. August 2002 Original geschrieben von Darth_Zeus sags halt gleich.......... UPDATE Ausfallzeiten SET Ausfallstunden = 7 WHERE Ausfallstunden = 8 AND Pers_ID = 4; Fertig So geht's nicht. Ich will ja nichts verändern in irgendwelchen Tabellen. Ich will nur eine Auswertung machen und dafür will ich überall da wo eine 8 steht eine 7 einlesen. Bei der Auswertung darf nichts an Daten verändert werden. Z.B. bei den Arbeitszeiten lese ich ja auch 0 Ausfallstunden ein, warum geht das in dem Fall nicht auch so ähnlich? Zitieren
Gast King555 Geschrieben 15. August 2002 Geschrieben 15. August 2002 Ich hab's endlich geschafft! Es gab einen Konflikt zwischen zwei Datentypen, nämlich Integer und Float. So klappt die Anweisung: select Datum, Stunden, 0 Ausfallstunden from az_taeglich where PERS_ID= 4 UNION ALL select Ausfalltag, 0.0 Arbeitsstunden, Ausfallstunden from Ausfallzeiten where PERS_ID= 4 UNION ALL select Datum, 0.0 Arbeitsstunden, 7 Ausfallstunden from Feiertage where Ausfallstunden = 8 UNION ALL select Datum, 0.0 Arbeitsstunden, 3 Ausfallstunden from Feiertage where Ausfallstunden = 4; Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.