![]() |
Datenbank: Firebird 1.5 • Zugriff über: ZQuerry
Problem mit UNION Select
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? :wall: Vielen Dank für eine Unterstützung |
Re: Problem mit UNION Select
Ich verstehe nicht ganz was du vorhast
|
Re: Problem mit UNION Select
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. |
Re: Problem mit UNION Select
Das geht aber nicht mit einem UNION. Nennt man Übrigens Pivot.
is die Anzahl der Datensätze pro PersNr bekannt? |
Re: Problem mit UNION Select
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; |
Re: Problem mit UNION Select
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; |
Re: Problem mit UNION Select
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 :gruebel: 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. |
Re: Problem mit UNION Select
Ja, man kann Bilder anhängen. Aber mit einem UNION kann man dein Problem nicht lösen.
|
Re: Problem mit UNION Select
Liste der Anhänge anzeigen (Anzahl: 1)
Ich verstehe nich, wieso Funktioniert das in Access(SQL) und in Delphi nicht?
Kennst Du noch weitere Möglichkeiten? |
Re: Problem mit UNION Select
Zitat:
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:
Aber die eigentliche Frage bleibt: Was ist mit verschiedenen Monaten/Jahren?
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 : : 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 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