Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: So 05.04.09 19:31 
Hi, Delpher,

kann man aus den folgenden zwei Abfragen eine einzige machen, so dass dann alle Infos in einer Tabelle zu sehen sind?

ausblenden 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

_________________
ut vires desint, tamen est laudanda voluntas
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: So 05.04.09 21:54 
Ich habe jetzt den (funktionierenden) folgenden Befehl:

ausblenden 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

_________________
ut vires desint, tamen est laudanda voluntas
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 05.04.09 21:56 
Welches DBMS?
Vielleicht wäre die Verwendung von (SQL-)Parametern eine Option

_________________
Markus Kinzler.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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

_________________
ut vires desint, tamen est laudanda voluntas
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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.
ausblenden 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)

_________________
Na denn, dann. Bis dann, denn.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mo 06.04.09 08:14 
Danke, Alzaimer. Schade, dass ich das nicht früher gewusst habe.
Gruß, Detlef

_________________
ut vires desint, tamen est laudanda voluntas
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 06.04.09 08:43 
user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mo 06.04.09 09:25 
Danke, Nersgatt,
ich gucke mir den Aufwand mal an,
Detlef

_________________
ut vires desint, tamen est laudanda voluntas