PDA

View Full Version : SQL - Differenz der eindeutigen Satz-ID



woki
29-05-06, 12:26
Hallo Forum,

ich habe ein Problem mit einem SQL-Statement.
Ich habe 2 Werte aus eine QuellenDatei und greife damit 2 mal auf eine ZielDatei zu.


Select a.KeyFeld1, a.KeyFeld2
b.KeyFeld, b.KZFeld, (Case when b.KZFeld = 0 then 1 else 0 end)
c.KeyFeld, c.KZFeld, (Case when c.KZFeld = 0 then 1 else 0 end)
From QuellenDatei as a
Inner join ZielDatei as b on a.KeyFeld1 = b.KeyFeld
Inner join ZielDatei as c on a.KeyFeld2 = c.KeyFeld

Ich möchte gerne die Different der Relativen Satznummer rausbekommen, aber irgendwie klappt das nicht......
Oder ist es möglich hier anders eine Eindeutige ID pro Satz zu ermitteln und dann die Diferenz zu berechnen?

Beispiel:


QuellenDatei
KeyFeld1 KeyFeld2
4711 4715

Zieldatei
RRN KeyFeld KZFeld
1 4711 0
2 4712 1
3 4713 2
4 4714 0
5 4715 0

Als Ergebnis möchte ich gerne 2 rausbekommen,
also die Differenz der RRN wobei KZFeld = 0.

Wie müßte mein SQL-Statement aussehen?

Fuerchau
29-05-06, 12:31
Normalerweise würde ich sagen:

rrn(b) - rrn(a)

woki
29-05-06, 12:41
Ich möchte nicht die Differenz aller Datensätze sondern nur derer, die KZFeld = 0 sind.

Fuerchau
29-05-06, 12:57
RRN(ID) liefert genau die Satznummer des einzelnen Satzes. Als ID ist der Name der Datei bzw. des Ersatzzeichens.

RRN(A) = Satznummer Quelle
RRN(B) = Satznummer 1. Join
RRN(C) = Satznummer 2. Join

woki
29-05-06, 13:05
QuellenDatei
KeyFeld1 KeyFeld2
4711 4715

Zieldatei
RRN KeyFeld KZFeld
1 4711 0
2 4712 1
3 4713 2
4 4714 0
5 4715 0

Rechne ich jetzt rrn(c) - rrn(b) -> 5-1 bekomme ich als Ergebnis 4. Wie kann ich die beiden Datensätze mit der RRN 2 und 3 ignorieren (KZFeld <>0) damit ich als Ergebnis 2 rausbekomme?

woki
29-05-06, 13:30
Oder gibt es eine andere Möglichkeit, als auf die RRN zu gehen und diese auszuwerten??

Frank Hildebrandt
29-05-06, 14:05
Ich gehe jetzt mal davon aus, dass Dich nur die Anzahl der Datensätze zwischen den beiden Argumenten in "QuellenDatei" interessiert und dass RRN bisher nur als Hilfsmittel hierfür benutzt wurde. Dann sollte das hier Dein Problem lösen.

Select
Count(*) - 1
From ZielDatei
Where
KeyFeld >= (Select KeyFeld1 From Quellendatei) and
KeYFeld <= (Select KeyFeld2 From Quellendatei) and
KZFeld = '0'

woki
30-05-06, 08:06
Genau das habe ich gesucht, vielen Dank!!:cool: