Entwickler-Ecke
Datenbanken - Aus zwei SQL's mach eine ...
D. Annies - So 05.04.09 19:31
Titel: Aus zwei SQL's mach eine ...
Hi, Delpher,
kann man aus den folgenden zwei Abfragen eine einzige machen, so dass dann alle Infos in einer Tabelle zu sehen sind?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| with QBuecher2 do begin fname := concat(label30.caption, 'OUTXLS\' + 'Ausleihsumme' +inttostr(t)+inttostr(m)+inttostr(j)+ '.xls'); Close; SQL.Clear; SQL.Text := format('select distinct B.Klasse, count(*) as anzahl from "%s" B ', [TbArtikel.tablename])+ 'where (B.Klasse like ''10%'' or B.Klasse like ''9%'' or B.Klasse like ''8%'' ' + 'or B.Klasse like ''7%'' or B.Klasse like ''6%'' or B.Klasse like ''5%'') ' + 'group by B.Klasse'; Open; TeilmengenausgabeSG(QBuecher2); Close; SQL.Clear; SQL.Text := format('select distinct B.Titel, B.Klasse from "%s" B ', [TbArtikel.tablename])+ 'where (B.Klasse like ''10%'' or B.Klasse like ''9%'' or B.Klasse like ''8%'' or ' + 'B.Klasse like ''7%'' or B.Klasse like ''6%'' or B.Klasse like ''5%'') ' + 'order by B.Klasse'; Open; TeilmengenausgabeSG(QBuecher2); end; |
Vielen Dank für Hilfe,
Detlef
D. Annies - So 05.04.09 21:54
Ich habe jetzt den (funktionierenden) folgenden Befehl:
Delphi-Quelltext
1: 2: 3: 4:
| SQL.Text := format('select B.Titel, count(*) as anzahl, B.Klasse from "%s" B ', [TbArtikel.tablename])+ 'where (B.Klasse like ''10%'' or B.Klasse like ''9%'' or B.Klasse like ''8%'' or ' + 'B.Klasse like ''7%'' or B.Klasse like ''6%'' or B.Klasse like ''5%'') ' + 'group by B.Klasse, B.Titel'; |
Geht's eleganter?
Detlef
mkinzler - So 05.04.09 21:56
Welches DBMS?
Vielleicht wäre die Verwendung von (SQL-)Parametern eine Option
D. Annies - Mo 06.04.09 07:15
Hi, Markus,
ich verwende D6 Enterprise und die normalen Delphi-DB-Kompos.
Die Aufzählung 10 5 6 7... kommt mir auch ein bisschen doof vor, deshalb wohl deine Anregung mit einem Parameter, aber wie muss ich den denn wählen?
Gruß, Detlef
alzaimar - Mo 06.04.09 07:48
Ein schönes Beispiel, das die Struktur einer Datenbanktabelle wohlüberlegt sein sollte. Hier wären zwei Spalten ('Klassenstufe' als Zahl ,'Klassenzusatz' als String) hinsichtlich der vorzunehmenden Abfragen sicherlich die bessere Wahl.
Dann würde die Abfrage auf ein simples
select * from <Tabelle> where Klassenstufe between 5 and 10
hinauslaufen (Normalisierungsfetischisten würden hier den Klassen sogar eine eigene Tabelle spendieren).
So bleibt Dir im Prinzip nichts Anderes übrig, als deine Abfrage so zu gestalten, wie Du es bisher getan hast. Man könnte die Abfrage durch ein 'BETWEEN' etwas übersichtlicher machen, aber das Grundproblem bleibt.
So könnte eine Verkürzung der Abfrage aussehen, wenn die 'Klasse' in der Form '5A', '6C' etc. formatiert ist.
SQL-Anweisung
1:
| select * from <Tabelle> where (Klasse between '5A' and '9Z') or (Klasse like '10%') |
Eleganter ist das nicht, dazu musst Du die Tabelle umformen (siehe 1.Absatz)
D. Annies - Mo 06.04.09 08:14
Danke, Alzaimer. Schade, dass ich das nicht früher gewusst habe.
Gruß, Detlef
Nersgatt - Mo 06.04.09 08:43
D. Annies hat folgendes geschrieben : |
| Schade, dass ich das nicht früher gewusst habe. |
Meiner Erfahrung nach ist es am besten, solche "Fehler" jetzt zu beheben, auch wenn es etwas Arbeit macht, als es dabei zu belassen. Sonst wird man sich jedes Mal darüber ärgern, wenn man an diese Stelle gelangt und hat vermutlich in der Summe mehr Arbeit, als wenn man es jetzt einmal richtig macht.
Mit jeder Programmerweiterung wird es schwieriger und damit auswändiger, es umzustellen.
D. Annies - Mo 06.04.09 09:25
Danke, Nersgatt,
ich gucke mir den Aufwand mal an,
Detlef
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!