Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
Delphi 7 Enterprise
|
Re: Problem mit UNION Select
9. Mai 2008, 23:27
Ok, dann hier nochmal ein neuer Vorschlag...
Delphi-Quellcode:
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;
Aufruf...
Ein Monat:
Query.SQL.Text:=GetSQL(StrToDate('1.5.2008'), 1);
Zwei Monate:
Query.SQL.Text:=GetSQL(StrToDate('1.5.2008'), 2);
Halb + Ganz + Halb:
Query.SQL.Text:=GetSQL(StrToDate('15.4.2008'), 2);
Gruss
Thorsten
|
|
Zitat
|