Delphi-PRAXiS
Seite 6 von 8   « Erste     456 78      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit UNION Select (https://www.delphipraxis.net/113349-problem-mit-union-select.html)

mu8zeh 7. Mai 2008 19:22

Re: Problem mit UNION Select
 
Mein PC ist noch mit Lösung 1 beschäftigt und pfeift in höchsten Tönen
CPU Auslastung.

Fehlermeldung ist aber keine gekommen.

mkinzler 7. Mai 2008 19:23

Re: Problem mit UNION Select
 
Deshalb eignet sich bei diesem Problem auch die Lösung mit der SP

mu8zeh 7. Mai 2008 19:30

Re: Problem mit UNION Select
 
Lösung 1 hat leider nicht Funktioniert. Ich musste es Abbrechen. Anschließend war DB defect.

mu8zeh 7. Mai 2008 20:09

Re: Problem mit UNION Select
 
Lösung 2?

Gehe ich richtig davon aus Lösung 2 als neu Procedures im IB Expert einzustellen?

mkinzler 7. Mai 2008 20:12

Re: Problem mit UNION Select
 
Ja. am Besten Skript starten

mu8zeh 7. Mai 2008 20:35

Re: Problem mit UNION Select
 
muss erst mal PC neu Booten.
Firebird-Server Startet nicht mehr. :coder2:

Ich melde mich morgen zu lösung 2

vielen Dank ersteinmal

omata 7. Mai 2008 22:30

Re: Problem mit UNION Select
 
Liste der Anhänge anzeigen (Anzahl: 1)
So nachdem du nun ordentliche Beispieldaten geliefert hast, habe ich mir das nochmal angesehen.

1. leg bitte in deinen Tabellen auch einen Primary Key an (benutze Contraints!)
2. benutze bitte adiquate Datentypen für deine Tabellenspalten, also für dein Datum auch den Typ Date
3. benutze immer für lange Texte den Typ VARCHAR, der verbraucht nur so viel Speicher wie benötigt wird.
CHAR benutzt immer die komplette Größe

Hier mal ein Vorschlag für deine Tabellenstruktur...
SQL-Code:
CREATE TABLE TEMP2007(
  DATUM DATE NOT NULL,
  PERSONALNR CHAR(4) NOT NULL,
  URLAUB CHAR(4),
  KURZZEICHEN CHAR(2) NOT NULL,
  MEMO CHAR(1),
  MEMOTEXT VARCHAR(250),
  AENDERUNG DATE,
  AENDERUNGVON CHAR(10),
  CONSTRAINT PK_TEMP2007_1 PRIMARY KEY (DATUM, PERSONALNR)
);
Dabei wird jetzt keine Tag-, Monat-, Jahr-Spalte mehr benötigt, da diese Daten aus dem Datum extrahiert werden können.
Stichwort: Redundanz!

Hier mal ein Vorschlag für deine gewünschte Auswertung...
SQL-Code:
SELECT EXTRACT(YEAR FROM datum) jahr,
       EXTRACT(MONTH FROM datum) monat,
       personalnr,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 1  THEN kurzzeichen ELSE NULL END) AS t1,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 2  THEN kurzzeichen ELSE NULL END) AS t2,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 3  THEN kurzzeichen ELSE NULL END) AS t3,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 4  THEN kurzzeichen ELSE NULL END) AS t4,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 5  THEN kurzzeichen ELSE NULL END) AS t5,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 6  THEN kurzzeichen ELSE NULL END) AS t6,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 7  THEN kurzzeichen ELSE NULL END) AS t7,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 8  THEN kurzzeichen ELSE NULL END) AS t8,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 9  THEN kurzzeichen ELSE NULL END) AS t9,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 10 THEN kurzzeichen ELSE NULL END) AS t10,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 11 THEN kurzzeichen ELSE NULL END) AS t11,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 12 THEN kurzzeichen ELSE NULL END) AS t12,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 13 THEN kurzzeichen ELSE NULL END) AS t13,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 14 THEN kurzzeichen ELSE NULL END) AS t14,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 15 THEN kurzzeichen ELSE NULL END) AS t15,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 16 THEN kurzzeichen ELSE NULL END) AS t16,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 17 THEN kurzzeichen ELSE NULL END) AS t17,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 18 THEN kurzzeichen ELSE NULL END) AS t18,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 19 THEN kurzzeichen ELSE NULL END) AS t19,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 20 THEN kurzzeichen ELSE NULL END) AS t20,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 21 THEN kurzzeichen ELSE NULL END) AS t21,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 22 THEN kurzzeichen ELSE NULL END) AS t22,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 23 THEN kurzzeichen ELSE NULL END) AS t23,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 24 THEN kurzzeichen ELSE NULL END) AS t24,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 25 THEN kurzzeichen ELSE NULL END) AS t25,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 26 THEN kurzzeichen ELSE NULL END) AS t26,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 27 THEN kurzzeichen ELSE NULL END) AS t27,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 28 THEN kurzzeichen ELSE NULL END) AS t28,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 29 THEN kurzzeichen ELSE NULL END) AS t29,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 30 THEN kurzzeichen ELSE NULL END) AS t30,
       MAX(CASE WHEN EXTRACT(DAY FROM datum) = 31 THEN kurzzeichen ELSE NULL END) AS t31
FROM temp2007
GROUP BY EXTRACT(YEAR FROM datum), EXTRACT(MONTH FROM datum), personalnr
ORDER BY EXTRACT(YEAR FROM datum), EXTRACT(MONTH FROM datum), personalnr
Bedenke aber dabei, dass es pro Datum+Person jetzt nur noch eine Zeile geben kann, dies wird durch den angelegten Primary Key eingehalten.

Geänderte Datenbank habe ich angehängt.

Hoffe das hilft dir weiter...

Gruss
Thorsten

mu8zeh 8. Mai 2008 10:03

Re: Problem mit UNION Select
 
Hallo Zusammen

DB ist wieder OK

ich habe Lösung 2 getestet.
Fehler es wird "SET TERM ^" angemeckert :gruebel:

in einer 2. DB habe ich die Struktur wie beschrieben geändert und den SQL Befehl ausgeführt.
Es kommt kein Fehler aber auch keine Daten.

Ich will aber nochmal Prüfen. Möglicherweise habe ich einen Fehler reingebastelt.

Ich melde mich gegen Abend noch einmal.

Vielen Dank bis dahin

mkinzler 8. Mai 2008 10:10

Re: Problem mit UNION Select
 
Unter Nützliches->Skript ausführen

mu8zeh 8. Mai 2008 10:43

Re: Problem mit UNION Select
 
Hee ich bin ganz toll Stolz auf Euch

Lösung 2 von mkinzler und Lösung von Thorsten Zeigen mir die Daten schon mal im Querformat an.
Einen Plan, wie ich das auf 2 Monate umsetzten kann hätte ich auch schon.

:firejump: :cheers:

Echt super
Beim nächsten mal werde ich gleich versuchen meine Fragen richtig darzustellen.

Ich kann die Frage ersteinmal als Beantwortet markieren.

Vielen, Vielen Dank nochmal :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
Seite 6 von 8   « Erste     456 78      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz