AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit UNION Select

Problem mit UNION Select

Ein Thema von mu8zeh · begonnen am 6. Mai 2008 · letzter Beitrag vom 10. Mai 2008
Antwort Antwort
Seite 1 von 8  1 23     Letzte » 
mu8zeh

Registriert seit: 31. Mai 2007
36 Beiträge
 
#1

Problem mit UNION Select

  Alt 6. Mai 2008, 16:13
Datenbank: Firebird 1.5 • Zugriff über: ZQuerry
Hallo

Ich habe ein Problem beim erstellen einer UNION

Beisp.
Tabelle 1
Tag
1
2
3
4
5
6
.
.
31

Tabelle 2

TAG_______|MERKMAL|PERSNR
01.01.2008...String.....|String
02.01.2008
03.01.2008
04.01.2008
05.01.2008
06.01.2008
.
.
31.01.2008...|String.....|String



SQL.SELECT PERSNR, dTAG([Tag]) as Date, MERKMAL FROM TABELLE2
UNION 0 SELECT TAG, 0,0
FROM TABELLE1

Nun sollte das ganze so ausehen

DBGrid
PERSNR__1_2_3_4_5_6__31
001.....A..B..A..A..B..B..........C
002.....A..B..A..A..B..B..........C

In Access(Abfrage) funktioniert das.
Habe ich da einen Denkfehler?

Vielen Dank für eine Unterstützung
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit UNION Select

  Alt 6. Mai 2008, 16:20
Ich verstehe nicht ganz was du vorhast
Markus Kinzler
  Mit Zitat antworten Zitat
mu8zeh

Registriert seit: 31. Mai 2007
36 Beiträge
 
#3

Re: Problem mit UNION Select

  Alt 6. Mai 2008, 16:35
Hallo und Danke


also Standartmässig werden die Daten unternander in Tabelle 2 gespeichert.
[u]Datum__|M|PERSNR
01.01.2008|A|001
02.01.2008|A|001
01.01.2008|B|002
02.01.2008|B|002
usw.

Für eine Ansicht in einem DBGrid brauche ich diese Daten aber nebeneinander.

PersNR|Datum|Datum|Datum >>> usw.

Ich hatte das mit einem StringGrid und SQL abgrage.
Wenn die Daten aber mehr als 100 sind ist das für eine optimale anzeige zu langsam.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit UNION Select

  Alt 6. Mai 2008, 16:37
Das geht aber nicht mit einem UNION. Nennt man Übrigens Pivot.
is die Anzahl der Datensätze pro PersNr bekannt?
Markus Kinzler
  Mit Zitat antworten Zitat
mu8zeh

Registriert seit: 31. Mai 2007
36 Beiträge
 
#5

Re: Problem mit UNION Select

  Alt 6. Mai 2008, 16:45
Hallo

die Anzahl ändert sich je nach eingabe

Mal noch ein bsp. wie ich's jetzt habe. Bis zu 5 PERSNR geht's ganz flott.

//**********************************
//Datum wird bereit gestellt
//**********************************

With Form1.StringGrid1 do begin
For NZ:= 4 to ColCount do begin
Cells[NZ,4]:= '';
Cells[NZ,0]:= FormatDateTime('ddd',dDatum);
Cells[NZ,1]:= FormatDateTime('dd',dDatum);
Cells[NZ,2]:= FormatDateTime('m',dDatum);
Cells[NZ,3]:= FormatDateTime('YYYY',dDatum);
Cells[NZ,5]:= FormatDateTime('mm',dDatum);
dDatum := dDatum +1;
end;
end;

//************************************************** ***************
//Daten werden geladen
//************************************************** ***************
procedure TForm1.LadeDaten(Sender: TObject; d,m,X,Y,Z,S: Integer);
begin

Z := 0;
while StringGrid2.Cells[0,Z]<> '' do begin
inc(S);
inc(Z);
end;

Z := 0;
with StringGrid2 do
while StringGrid2.Cells[0,Z]<> '' do begin
mxStatusBar1.Panels[3].ProgressBar.Min := 0;
mxStatusBar1.Panels[3].ProgressBar.Max := S;
mxStatusBar1.Panels[3].ProgressBar.Position := Z;

with DataModule1.ZTEMP2007 do begin
SQL.Clear;
SQL.Add('SELECT TEMP2007.DATUM, TEMP2007.TAG, TEMP2007.MONAT, '+
'TEMP2007.JAHR, TEMP2007.PERSONALNR, TEMP2007.URLAUB, '+
'TEMP2007.KURZZEICHEN, TEMP2007.MEMOTEXT, TEMP2007.AENDERUNG, '+
'TEMP2007.AENDERUNGVON, KATEGORIE.COLOR FROM TEMP2007 '+
'INNER JOIN KATEGORIE ON (TEMP2007.KURZZEICHEN = '+
'KATEGORIE.KURZZEICHEN) WHERE TEMP2007.PERSONALNR = '+
QuotedStr(StringGrid2.Cells[0,Z]) +' AND TEMP2007.MONAT >= '+
QuotedStr(StringGrid1.Cells[4,5]) +' AND TEMP2007.JAHR = '+
QuotedStr(StringGrid1.Cells[4,3])+
' AND TEMP2007.KURZZEICHEN <> '+ QuotedStr('-')+' ORDER BY MONAT, TAG');
Active := True;
with StringGrid1 do begin
For X := 4 to StringGrid1.ColCount -1 do begin
Datum := StrToDate(Cells[X,1] + '.' + Cells[X,5] + '.' + Cells[X,3]);
First;
While Not Eof do begin
if FieldValues['DATUM'] = DateToStr(Datum) then begin
with StringGrid3 do
StringGrid3.Cells[x-4,Z] := FieldValues['KURZZEICHEN'];
end;
Next;
end;
end;
end;
Next;
end;
Z := Z+1;
end;
mxStatusBar1.Panels[3].ProgressBar.Position := 0;
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Problem mit UNION Select

  Alt 6. Mai 2008, 16:54
SQL-Code:
select
    distinct p.persnr,
    first 1 d.datum as datum1,
    first 1 skip 1 d.datum as datum2,
    first 1 skip 2 d.datum as datum 3,
    ...
from
    tabelle2 p
        left join tabelle2 d on d.persnr = p.persnr;
Markus Kinzler
  Mit Zitat antworten Zitat
mu8zeh

Registriert seit: 31. Mai 2007
36 Beiträge
 
#7

Re: Problem mit UNION Select

  Alt 6. Mai 2008, 22:01
es will einfach nicht

habe es nochmal mit der Union versucht

select temp2007.personalnr, temp2007.tag As dTAG, temp2007.kurzzeichen, temp2007.monat, temp2007.jahr, temp2007.memo from temp2007
union select 0, DummyDay ,0,0,0,0
from dummy

das ist die Fehlermeldung

Column does not belong to referenced table.
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
Data type unknown.

Bekommt man hier Bilder rein? Dann könnte ich mal zeigen wie ich es bräuchte.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Problem mit UNION Select

  Alt 6. Mai 2008, 22:06
Ja, man kann Bilder anhängen. Aber mit einem UNION kann man dein Problem nicht lösen.
Markus Kinzler
  Mit Zitat antworten Zitat
mu8zeh

Registriert seit: 31. Mai 2007
36 Beiträge
 
#9

Re: Problem mit UNION Select

  Alt 6. Mai 2008, 22:17
Ich verstehe nich, wieso Funktioniert das in Access(SQL) und in Delphi nicht?

Kennst Du noch weitere Möglichkeiten?
Miniaturansicht angehängter Grafiken
pl_209.jpg  
  Mit Zitat antworten Zitat
omata

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

Re: Problem mit UNION Select

  Alt 6. Mai 2008, 22:20
Zitat von mu8zeh:
Für eine Ansicht in einem DBGrid brauche ich diese Daten aber nebeneinander.

PersNR|Datum|Datum|Datum >>> usw.
Aus deinen Ausführungen werde ich nicht wirklich schlau.

Schön das dich mkinzler versteht, aber vielleicht kannst du nochmal genauer erklären was du eigentlich haben möchtest.

- Was ist z.B. mit verschiedenen Monaten und Jahren?
- Wieso Datum neben Datum, sollte da nicht das Merkmal stehen?

Das das Access kann ist klar, das hat aber rein gar nichts mit SQL zu tun, dafür hat man dann OLAP erfunden. Aber das das Firebird nicht kann hat nichts mit Firebird zu tun, sowas musst du selber machen (in deiner Anwendung) oder zum Beispiel mit Excel als Pivot-Tabelle (und SQL-Abfrage im Hintergrund), dann müssen die Daten nämlich auch anders (nämlich in Zeilen) vorliegen, so wie das eine Datenbank kann und normalerweise liefert.

Ich weiss das dir das jetzt nicht weiterhilft, aber deine Aussagen sind einfach nicht präzise genug, um dir wirklich helfen zu können.

Edit: hier nochmal ein Vorschlag...
SQL-Code:
SELECT DISTINCT persnr, t1.merkmal AS t1, t2.merkmal AS t2, t3.merkmal AS t3
FROM tabelle2 x
LEFT JOIN tabelle2 t1
  ON x.persnr = t1.persnr
     AND EXTRACT(DAY FROM t1.tag) = 1
LEFT JOIN tabelle2 t2
  ON x.persnr = t2.persnr
     AND EXTRACT(DAY FROM t2.tag) = 2
LEFT JOIN tabelle2 t3
  ON x.persnr = t3.persnr
     AND EXTRACT(DAY FROM t3.tag) = 3
:
:
Aber die eigentliche Frage bleibt: Was ist mit verschiedenen Monaten/Jahren?

Du must dich von der Vorstellung lösen, das du die Spalten einer Tabelle variable durch die Zeilen einer Tabelle abbilden/bestimmen kannst. Das hat nichts mit SQL zu tun!

Gruss
Thorsten
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:24 Uhr.
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