Anzahlermittlung mit SQL Abfrage

Hallo allerseits,
ich habe ein Problem aus einer Tabelle die anzahl der Monate herauszufinden, in denen Verhehre vorhanden sind.
Das Problem ist, das auch mehrere Verkehre möglich sind. Damit scheidet ein einfaches „Couns(Spalte)“ aus. Gibt es die Möglichkeit die Information mit einer einzigen Abfrage zu bekommen?
Datenbank: Access 2000,
Tabellenlänge der Herkunststabelle: ca. 700000 Zeilen.

Vielen Dank im voraus
Kai

Hi!

Zwecks gerade nicht Verfügbarkeit keine Ahnung, ob das auch in Access funktioniert (dieser Satzbau!):

select count(distinct monat) from tabelle

Grüße,
Tomh

Moin, Kai,

ich habe ein Problem aus einer Tabelle die anzahl der Monate
herauszufinden, in denen Verhehre vorhanden sind.
Das Problem ist, das auch mehrere Verkehre möglich sind. Damit
scheidet ein einfaches „Couns(Spalte)“ aus. Gibt es die
Möglichkeit die Information mit einer einzigen Abfrage zu
bekommen?
Datenbank: Access 2000,
Tabellenlänge der Herkunststabelle: ca. 700000 Zeilen.

so gifft dat nix, wir sind doch keine Hellseher. Schreib wenigstens die Spaltennamen der Tabelle hin, darunter meinswegen drei Zeilen mit Inhalten.

Gruß Ralf

Die für die Abfrage relevanten Spalten sind :
Datum, ID
#1/1/2002#, 001
#1/1/2002#, 001
#2/1/2002#, 001
#2/1/2002#, 001
#3/1/2002#, 001
#3/1/2002#, 001
#3/1/2002#, 001
#6/1/2002#, 001
#2/1/2002#, 002
#3/1/2002#, 002
#3/1/2002#, 002
#3/1/2002#, 002
#6/1/2002#, 002

Mein gesuchtes Ergebnis idt nun die Anzahl der vorhandenen Monate je ID, im Szizzierten Fall, für die ID 001 4 Monate, und für die ID 002 3 Monate.
Die SQL Strings werden dynamisch erzeugt und das Ergebnis hat 42 Spalten. Daher habe ich keinen Originalausschnitt gepostet.

Vielen Dank…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Das währe es, nur gibt es diese Funktion unter Access leider nicht.

-(
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Kai,

vielleicht geht’s eleganter, aber so funktioniert es wenigstens, Diese Abfrage zählt für jeden ID die unterschiedlichen Monate:

SELECT ID, count (monat)
FROM
(
SELECT DISTINCT [Jahr], [Monat], [ID]
FROM Tabelle1
ORDER BY [id], [jahr], [monat]
)
GROUP BY id;

Gruß Ralf

Hallo Ralf,
das Problem bei der Lösung ist, dass ich mit jeder Zeile, die meinen Kriterien entspricht, mehrere Berechnungen durchführen muss. ich berechne eine Art Preisindexveränderung, und dazu Berechne ich bei jeder Zeile meiner Tabelle die Preisveränderung.

Wenn ich nun bei der Tabelle:
ID1 Datum ID Umsatz
1 02.02.2002 2 10
2 02.02.2002 2 10
3 02.03.2002 3 100
4 02.02.2002 3 100
5 02.02.2002 3 100

die Abfrage

SELECT ID, Count(Datum) AS [Anzahl von Datum], Sum(Umsatz) AS [Summe von Umsatz]
FROM
(
SELECT DISTINCT [Datum], [Umsatz], [ID]
FROM testtabelle
)
GROUP BY ID;
anwende bekommen ich:

ID Anzahl von Datum Summe von Umsatz
2 1 10
3 2 200
Mir ist klar warum ich das Ergebnis bekomme, aber nicht wie ich das Problem lösen könnte. Dazu ist zu sagen, dass immer unterschiedliche Gruppierungs und Wherekriterien verwendet werden, da das Aussehen der Ergebnistabelle von Benutzereingaben abhängt.

Einen schönen abend noch…
Kai

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi!

Das Ergebnis für diese Zeilen

ID1 Datum ID Umsatz
1 02.02.2002 2 10
2 02.02.2002 2 10
3 02.03.2002 3 100
4 02.02.2002 3 100
5 02.02.2002 3 100

sollte also so aussehen?
ID Anzahl von Datum Summe von Umsatz
2 1 20
3 2 300

??

Wir gruppieren ganz einfach auch das innere Select:

SELECT ID, Count(Datum) AS [Anzahl von Datum], Sum(Umsatz) AS
[Summe von Umsatz]
FROM
(
SELECT DISTINCT [Datum], sum([Umsatz]) as Umsatz, [ID]
FROM testtabelle group by Datum,ID
)
GROUP BY ID;

Paßt’s?

Grüße,
Tomh

Hallo Tomh,
Es hat geklappt, allerdings ein wenig anders, als Du vorgeschlagen hast. Die richtige Idee ist mir dann gekommen:
Die Demo-Ausgangstabelle:
ID1 Datum ID umsatz1 Menge1 Umsatz2 Menge2
1 02.02.2002 2 10 2 10 2
2 02.02.2002 2 10 2 10 2
3 02.03.2002 3 100 10 100 11
4 02.02.2002 3 200 20 200 20
5 02.02.2002 3 100 10 100 10

Der SQL-string:
SELECT ID, sum(countdatum) AS [Anzahl von Datum], sum(Hypumsatz) AS [hypum],first(datum)
FROM
(
SELECT DISTINCT count([Datum]) as Countdatum, sum([Umsatz1]/[Menge1]*[menge2]) as Hypumsatz,id,datum
FROM testtabelle
group by Datum,ID
) as zw
GROUP BY ID;

Das Ergebnis:

ID Anzahl von Datum hypum Expr1003
2 2 20 02.02.2002
3 3 410 02.03.2002

Der „hypum“ ist der Umsatz, welcher erziehlt worden währe, wenn bei den Mengen des aktuellen Jahres die Preise des Vorjahres angesetzt werden. Der aktuelle Umsatz geteilt durch den „Hypum“ stellt die gewichtete Preisveränderung im Sinne eines Indexes nach Laspeyres dar.

Vielen Dank alle die mir beim Lösen des Problems geholfen haben!

Kai

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nachtrag:
Es muss natürlich die Formel:
sum((Umsatz neu/ Mengen neu)/Menge alt)
sein.
Die Sruktur der Abfrage ändert das natürlich nicht.

Na ja man kann ja blind sein:

Der String muss natürlich lauten:

Der SQL-string:
SELECT ID, count(countdatum) AS [Anzahl von Datum], sum(Hypumsatz) AS [hypum],first(datum)
FROM
(
SELECT DISTINCT count([Datum]) as Countdatum, sum([Umsatz1]/[Menge1]*[menge2]) as Hypumsatz,id,datum
FROM testtabelle
group by Datum,ID
) as zw
GROUP BY ID;
Ich hoffe das war der letzte Nachtrag
Kai

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]