AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit UNION Select
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit UNION Select

Ein Thema von mu8zeh · begonnen am 6. Mai 2008 · letzter Beitrag vom 10. Mai 2008
Antwort Antwort
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#1

Re: Problem mit UNION Select

  Alt 7. Mai 2008, 22:30
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
Angehängte Dateien
Dateityp: zip planer_105.zip (177,0 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz