AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenauswertung mit SQL-Befehl?
Thema durchsuchen
Ansicht
Themen-Optionen

Datenauswertung mit SQL-Befehl?

Ein Thema von d6lpz · begonnen am 16. Apr 2008 · letzter Beitrag vom 19. Apr 2008
Antwort Antwort
Seite 1 von 3  1 23      
d6lpz

Registriert seit: 26. Mär 2008
73 Beiträge
 
Delphi 6 Professional
 
#1

Datenauswertung mit SQL-Befehl?

  Alt 16. Apr 2008, 15:16
Datenbank: Acc2000 • Zugriff über: ADO
Hallo,

folgendes Problem - ich habe in einer Tabelle folgende Felder:

f_date (Datum)
f_content (Bewertung)
f_name (Person-Name)

Realisieren möchte ich mit SQL soetwas ähnliches wie in der CountIf Funktion in Excel.

Konkret: Ich möchte die Anzahl der Zyklen zählen in denen für die jeweilige Person auf aufeinanderfolgenden Daten der gleiche Content hinterlegt ist.

zb.:

im Zeitraum von ### bis ###

Person1 / 3 Zyklen / Content:"W"
Person2 / 7 Zyklen / Content:"W"
Person3 / 6 Zyklen / Content:"W"

Person1 / 2 Zyklen / Content:"C"
Person2 / 3 Zyklen / Content:"C"
Person3 / 7 Zyklen / Content:"C"

Geht soetwas mit SQL oder muß man den Inhalt der Tabelle einlesen und dann über eine Schleife auswerten?
(Benutzung Array??)
Danke für alle Hinweise
Dirk
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Datenauswertung mit SQL-Befehl?

  Alt 17. Apr 2008, 00:13
Hallo Dirk,

irgendwie verstehe ich deine Problematik nicht wirklich...

1. Wo stehen in deiner Tabelle die Zyklen?
2. Ich kenne kein CountIf von Excel, kannst du das mal genauer erklären?
3. Kannst du nicht mal ein konkretes Beispiel liefern, was du wie hast und was du eigentlich genau haben möchtest?

So kann man dir leider nicht helfen...

Gruss
Thorsten
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Datenauswertung mit SQL-Befehl?

  Alt 17. Apr 2008, 06:19
Grundsätzlich geht fast Alles in SQL.

edit: @omata. Ich denke, er hat sich einigermaßen klar ausgedrückt, jedenfalls denke ich, er möchte zählen, wie oft ein Name hintereinander vorkommt. Ach neee, er meint ne einfache Gruppierung mit Summen!

Also:
SQL-Code:
  select f_name, f_content, count (*) as Zyklen
    from Tabelle
   where f_date between :FromDate and :ToDate
group by f_name, f_content
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Datenauswertung mit SQL-Befehl?

  Alt 17. Apr 2008, 07:25
Ich hab das so verstanden, dass der selbe Content fortlaufend und unterbrechungsfrei nacheinander stehen muss. Knifflig
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Datenauswertung mit SQL-Befehl?

  Alt 17. Apr 2008, 07:45
Wenn das so ist, dann benötigt man eine Ordnungsspalte (AutoInc) und ein Self-Join mit Gruppierung oder ein SubSelect. Gar nicht sooo kniffelig.

Aber ohne eine extra Ordnungsspalte bzw. in Access ist das wirklich verdammt kniffelig.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
d6lpz

Registriert seit: 26. Mär 2008
73 Beiträge
 
Delphi 6 Professional
 
#6

Re: Datenauswertung mit SQL-Befehl?

  Alt 17. Apr 2008, 14:19
Danke an alle die sich mit meinem Problem befassen!!

Mit Zyklen ist gemeint, dass z.B. vom 01.01.2008 - 05.01.2008 ein "W" in dem Feld 'f_content' steht.
Dann wieder vom 03.03.2008 - 04.03.2008. Das wären dann für den Mitarbeiter "XY" zwei Zyklen im Jahr 2008.

Das für jeden Mitarbeiter und über einen über Parameter zu definierenden Zeitraum (f_date).

Ich habe jetzt versucht über

Delphi-Quellcode:
while not Source.Eof do
begin
     for Counter := 0 to Source.RecordCount-1 do
     begin
     f_date[Counter]:= source.FieldByName('f_date').Value;
     f_name[Counter]:= source.FieldByName('f_name').Value;
     f_content[Counter]:= source.FieldByName('f_content').Value;
     end;
end;
die Daten auszulesen und dann wollte ich sie entsprechend auswerten und das Ergebnis (Namen,Zyklen,Daten) in ein Recordset speichern und dann für einen Report weiterverarbeiten.

Ich merke nur, dass das ein ganz schönes Gefummel ist und dachte das man das irgenwie mit SQL besser lösen kann.
Vielleicht kann mir noch jemand weiter helfen. -> Stichwort SQL Syntax

PS: Die Daten brauchen eigentlich nirgends zwischengespeichert werden. Ich dachte ich kann ein DataSet im "Speicher" mit den Werten füllen und dieses dann der Reportkomponente als Grundlagen zur Verfügung stellen.
Wenn ich ehrlich bin, weiß ich allerdings noch nicht wie das gehen könnte.

Dirk
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#7

Re: Datenauswertung mit SQL-Befehl?

  Alt 17. Apr 2008, 15:12
Zitat von d6lpz:
Mit Zyklen ist gemeint, dass z.B. vom 01.01.2008 - 05.01.2008 ein "W" in dem Feld 'f_content' steht.
Dann wieder vom 03.03.2008 - 04.03.2008. Das wären dann für den Mitarbeiter "XY" zwei Zyklen im Jahr 2008.
Und für jedes Datum und jeden Mitarbeiter gibt jeweils einen Datensatz?

Deine beiden Schleifen sehen übrigens gar nicht gut aus - selbst wenn du mit Source.Next in der while-Schleife noch dem Deadlock entfliehen könntest, wirst du in deinem Array doch nur die Werte des letzten Datensatzes finden...
Confuzius say: Early worm have death wish.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Datenauswertung mit SQL-Befehl?

  Alt 17. Apr 2008, 15:22
Zitat von d6lpz:
und dachte das man das irgenwie mit SQL besser lösen kann. Vielleicht kann mir noch jemand weiter helfen. -> Stichwort SQL Syntax
Zitat von alzaimar:
Grundsätzlich geht fast Alles in SQL.
SQL-Code:
  select f_name, f_content, count (*) as Zyklen
    from Tabelle
   where f_date between :FromDate and :ToDate
group by f_name, f_content
Du musst nur statt ':FromData' und ':ToDate' den Zeitraum angeben. Dann erhältst Du eine Tabelle mit der anzahl der Zykle je benutzer im angegebenen Zeitraum.
Zitat von Peinhard:
selbst wenn du mit Source.Next in der while-Schleife noch dem Deadlock entfliehen könntest, wirst du in deinem Array doch nur die Werte des letzten Datensatzes finden...
Erstens ist das kein 'Deadlock', sondern eine 'Endlosschleife' und zweitens findet man im Array alle Datensätze. Aber Drittens löst es das Problem nicht.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
d6lpz

Registriert seit: 26. Mär 2008
73 Beiträge
 
Delphi 6 Professional
 
#9

Re: Datenauswertung mit SQL-Befehl?

  Alt 17. Apr 2008, 15:37
1.
Sorry, aber das war natürlich Blödsinn.
So habe ich es wirklich:

Delphi-Quellcode:
while not Source.Eof do
begin
      x_date[counter]:= source.FieldByName('f_date').Value;
      x_name[counter]:= source.FieldByName('f_name').Value;
      x_content[counter]:= source.FieldByName('f_content').Value;
      counter:=counter+1;
source.Next;
end;
2.
Die SQL zählt mir doch nur die Anzahl der "W" pro Mitarbeiter in dem angegebenen Zeitraum - oder verstehe ich da etwas falsch?

Dirk
  Mit Zitat antworten Zitat
d6lpz

Registriert seit: 26. Mär 2008
73 Beiträge
 
Delphi 6 Professional
 
#10

Re: Datenauswertung mit SQL-Befehl?

  Alt 17. Apr 2008, 15:41
Zitat von Peinhard:
Und für jedes Datum und jeden Mitarbeiter gibt jeweils einen Datensatz?
Ja - für jeden Mitarbeiter gibt es jeden Tag einen Eintrag.
Dirk
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz