![]() |
Re: Problem mit UNION Select
Hallo mkinzler,
ein kleines Problem habe ich da doch noch gefunden. Die Variable "kurz" bleibt gefüllt. bsp. beim 1. gefundenen Datensatz am 1 Tag = Kurzzeichen "T" beim 2. gefundenen Datensatz am 1 Tag auch = Kurzzeichen "T" aber nur dann, wenn der wert gleich Null oder '' sein sollte. wo müsste ich die Variable leeren? |
Re: Problem mit UNION Select
Wo auch die anderen Variablen geleert werden also
SQL-Code:
d1 = ''; ... kurz = '':
|
Re: Problem mit UNION Select
ups das habe ich übersehen :oops:
|
Re: Problem mit UNION Select
Man sollte es aber eher in die innere Schleife verschieben.
|
Re: Problem mit UNION Select
ich versuche gerade mein glück
|
Re: Problem mit UNION Select
Zitat:
Mein Vorschlag ist doch auch für mehrere Monate ausführbar und auch eingrenzbar. Allerdings kommt dort für jede Person eine Zeile pro Monat/Jahr heraus. Du willst doch wohl nicht alle Monate als Spalten realisieren? Was willst du den mit 365 Spalten? Was machst du in 10 Jahren -> 3650 Spalten? Naja, wie auch immer: ich verstehe dich nicht. Gruss Thorsten |
Re: Problem mit UNION Select
Hallo Thorsten
Nein Du hast alles super verstanden. So wie Ihr die beiden Vorlagen erstellt habt ist es was ich wollte. Ein kleines Problem habe ich aber bei der Anzeige auf Desktop. Wenn Auflösung = 1024 x 768 ist, dann brauche ich nur einen Monat. Ist aber Auflösung 1280 x 960 oder Monat = Februar, dann brauche ich zwei Monate. Zum B. Aktuellen Monat und ca. die hälfte vom nächsten Monat. Ich habe es noch nicht erstellt oder getestet. Aber ich denke mal, dass ich das mit zwei DBGrids darstellen könnte. Mit einem Monat geht es super. Konntest Du meiner Schilderung folgen? |
Re: Problem mit UNION Select
Ok, dann hier nochmal ein neuer Vorschlag...
Delphi-Quellcode:
Aufruf...
uses DateUtils;
function GetSQL(StartTag:TDate; Monat:byte):string; var s:string; Datum, Ende:TDate; begin Datum:=StartTag; Ende:=IncMonth(StartTag, Monat)-1; s:=''; while Datum <= Ende do begin s:=s + Format( ' MAX(CASE WHEN datum = %s ' + 'THEN kurzzeichen ' + 'ELSE NULL ' + 'END) AS "%s",', [QuotedStr(DateToStr(Datum)), DateToStr(Datum)]) + #13; Datum:=IncDay(Datum, 1); end; if s <> '' then s:=copy(s, 1, length(s)-2); Result:= Format( 'SELECT EXTRACT(YEAR FROM datum) jahr,'#13 + ' EXTRACT(MONTH FROM datum) monat,'#13 + ' personalnr,'#13 + '%s'#13 + 'FROM temp2007'#13 + 'WHERE datum BETWEEN %s AND %s'#13 + 'GROUP BY EXTRACT(YEAR FROM datum),'#13 + ' EXTRACT(MONTH FROM datum), personalnr'#13 + 'ORDER BY EXTRACT(YEAR FROM datum),'#13 + ' EXTRACT(MONTH FROM datum), personalnr', [s, QuotedStr(DateToStr(StartTag)), QuotedStr(DateToStr(Ende))] ); end; Ein Monat:
Delphi-Quellcode:
Zwei Monate:
Query.SQL.Text:=GetSQL(StrToDate('1.5.2008'), 1);
Delphi-Quellcode:
Halb + Ganz + Halb:
Query.SQL.Text:=GetSQL(StrToDate('1.5.2008'), 2);
Delphi-Quellcode:
Gruss
Query.SQL.Text:=GetSQL(StrToDate('15.4.2008'), 2);
Thorsten |
Re: Problem mit UNION Select
Hallo Thorsten
vielen Dank. Ich werde es morgen einbauen und Rückinfo geben. Ach ich konnte die Zeit nicht abwarten. Was soll ich sagen. Ich bin sprachlos. Ich entnehme aber daraus, dass Du etwas mit meiner Beschreibung anfangen konntest. :roll: Nun wird es ein leichtes sein, die Daten entsprechend anzuzeigen. Vielen Dank noch mal an alle die mir geholfen haben. :mrgreen: Grüße Detlef |
Re: Problem mit UNION Select
Eine Frage hätte ich da mal noch.
Was macht das „%“ Zeichen? Möchte gerne Verstehen, was ich in das Prog. Schreibe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 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