Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Laufende Nummerierung von gruppierten Datensätzen in einer Abfrage

Begonnen von gassek, Juli 14, 2016, 17:39:35

⏪ vorheriges - nächstes ⏩

gassek

Hallo Ladys and Gentlemen,

ich habe folgende Abfrage:

SELECT abf.VerAE_TSIDRef, abf.VerAE_KdIDRef, abf.VerAE_LOIDRef, abf.VerAE_Artikel, abf.BestAenderung, abf.LfdSaldo, abf.PreisProTag, abf.AenderungsDatum, DateDiff("d",[Aenderungsdatum],(Select top 1 T.Aenderungsdatum          From abf_Summen as T  Where
T.VerAE_Artikel = abf.VerAE_Artikel  and abf.Aenderungsdatum<T.Aenderungsdatum)) AS AnzTage
FROM abf_Summen AS abf
ORDER BY abf.VerAE_Artikel, abf.AenderungsDatum;

Nun mein Problem:

Ich gebe einen sog. Abrechnungszeitraum vor (z.B. 01.05.2016 bis 15.06.2016).
Ich benötige eine Zahl, die fortlaufend die Bestandsänderung eines jeden Artikels im Abrechnungszeitraum durchnummeriert, beginnend mit "1".
Wurde der Artikelbestand im Abrechnungszeitraum nicht verändert, soll dort eine "0" erscheinen.

Ich bedanke mich im Voraus für eure Hilfe.
Gruß
Jürgen

Lachtaube

Und da steht zur Zeit nichts (Null)? Wenn ja, kann man vermutlich ein Nz(..., 0) um die Unterabfrage legen.
Grüße von der (⌒▽⌒)

gassek

Genau, das Feld ist zurzeit leer.
Die Null-Abfrage krieg ich natürlich hin.
Gruß
Jürgen

gassek

Leider ist mein Problem damit noch nicht gelöst.

Ich wäre sehr dankbar, wenn sich jemand meinem Problem annimmt.
Gruß
Jürgen

Lachtaube

Man könnte erwarten, dass Du den Lösungsversuch zeigen würdest und mitteiltest, was nicht erwartungsgemäß eintritt.

Vermutlich ist die Hürde für potentielle Helfer auch etwas geringer, wenn einige Spieldaten als Text (möglichst importgerecht) vorlägen. :)
Grüße von der (⌒▽⌒)

gassek

Hallo,

ich möchte in dieser Abfrage in einer Spalte die lfd Nummer berechnen lassen, die angibt, wie oft ein Artikel im Abrechnungszeitraum ( BegDat   EndDat) verändert wurde.

VerAE_Artikel   AenderungsDatum   BegDat   EndDat         Nummer
Hüftsteak13   19.03.2016   01.05.2016   31.05.2016         0
Hüftsteak13   19.04.2016   01.05.2016   31.05.2016         0
Hüftsteak13   09.05.2016   01.05.2016   31.05.2016         1
Hüftsteak13   20.05.2016   01.05.2016   31.05.2016         2
Hüftsteak13   29.06.2016   01.05.2016   31.05.2016         0
Karbonade32   08.07.2016   01.05.2016   31.05.2016         0
Lachse12           08.05.2016   01.05.2016   31.05.2016         1
Lachse13           02.05.2016   01.05.2016   31.05.2016         1
Lachse13           08.05.2016   01.05.2016   31.05.2016         2
Lachse13           06.06.2016   01.05.2016   31.05.2016         0
Lachse33           08.07.2016   01.05.2016   31.05.2016         0
Schnitzel13   27.06.2016   01.05.2016   31.05.2016         0
Schnitzel13   08.07.2016   01.05.2016   31.05.2016         0
Schweinefilet12   03.05.2016   01.05.2016   31.05.2016         1
Schweinefilet13   03.05.2016   01.05.2016   31.05.2016         1
Schweinefilet13   29.06.2016   01.05.2016   31.05.2016         0
Schweinefilet33   03.05.2016   01.05.2016   31.05.2016         1


Ich weiß nicht, wie ich es sonst besser darlegen kann...

Gruß
Jürgen

MaggieMay

#6
Hallo,

zeig doch bitte auch noch den SQL-Code der Abfrage dazu.

...oder versuche es mal hiermit:Select VerAE_Artikel, AenderungsDatum, BegDat, EndDat, IIf(AenderungsDatum Between BegDat AND EndDat,
DCount("*","tabelle","VerAE_Artikel='" & VerAE_Artikel & "' AND AenderungsDatum <" & Format([AenderungsDatum],"\#yyyy\/mm\/dd\#"))+1, 0) AS lfdNr
From tabelle
Freundliche Grüße
MaggieMay

Lachtaube

Eine Textdatei im Anhang wäre die bevorzugte Art gewesen. :)

Ich habe die Tabelle data getauft und nur die ersten beiden Felder verwendet, die ich in A und D umbenannt habe. Weiterhin habe ich einen eindeutigen Mehrfachindex über (A, D) und einen einfachen Index auf D gelegt. Start und Ende sind als Parameter ausgelegt.

PARAMETERS [@Start] DateTime,
           [@Ende] DateTime;
SELECT d0.A,
       d0.D,
       (SELECT Count(*) FROM data
         WHERE A = d0.A
           AND D Between [@Start] AND [@Ende]
           AND d0.D Between [@Start] AND [@Ende]
           AND D <= d0.D) AS N
  FROM data AS d0;

Ergebnis:A        D        N
Hüftsteak13        19.03.2016        0
Hüftsteak13        19.04.2016        0
Hüftsteak13        09.05.2016        1
Hüftsteak13        20.05.2016        2
Hüftsteak13        29.06.2016        0
Karbonade32        08.07.2016        0
Lachse12        08.05.2016        1
Lachse13        02.05.2016        1
Lachse13        08.05.2016        2
Lachse13        06.06.2016        0
Lachse33        08.07.2016        0
Schnitzel13        27.06.2016        0
Schnitzel13        08.07.2016        0
Schweinefilet12        03.05.2016        1
Schweinefilet13        03.05.2016        1
Schweinefilet13        29.06.2016        0
Schweinefilet33        03.05.2016        1
Grüße von der (⌒▽⌒)

gassek

So meine lieben Freunde -wenn ich das sagen darf!

Eure Tipps waren großartig...
Nur ich musste meine gesamte DB nochmal von vorne aufbauen, um zu verstehen was ihr meint.

Jetzt hab ich alles geschafft, und immerhin fast die Hälfte kapiert!

Nochmals vielen Dank an euch Gurus. :)

Ihr dürft euch schon mal darauf einstellen, - irgendwann bin ich wieder da.
Gruß
Jürgen