![]() |
Datenbank: Acc2000 • Zugriff über: ADO
Datenauswertung mit SQL-Befehl?
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 |
Re: Datenauswertung mit SQL-Befehl?
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 |
Re: Datenauswertung mit SQL-Befehl?
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 |
Re: Datenauswertung mit SQL-Befehl?
Ich hab das so verstanden, dass der selbe Content fortlaufend und unterbrechungsfrei nacheinander stehen muss. Knifflig :gruebel:
|
Re: Datenauswertung mit SQL-Befehl?
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. |
Re: Datenauswertung mit SQL-Befehl?
Danke an alle die sich mit meinem Problem befassen!! :thumb:
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:
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.
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; Ich merke nur, dass das ein ganz schönes Gefummel ist und dachte das man das irgenwie mit SQL besser lösen kann. :gruebel: 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 |
Re: Datenauswertung mit SQL-Befehl?
Zitat:
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... |
Re: Datenauswertung mit SQL-Befehl?
Zitat:
Zitat:
Zitat:
|
Re: Datenauswertung mit SQL-Befehl?
1.
Sorry, aber das war natürlich Blödsinn. So habe ich es wirklich:
Delphi-Quellcode:
2.
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; Die SQL zählt mir doch nur die Anzahl der "W" pro Mitarbeiter in dem angegebenen Zeitraum - oder verstehe ich da etwas falsch? Dirk |
Re: Datenauswertung mit SQL-Befehl?
Zitat:
Dirk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 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 by Thomas Breitkreuz