Anmelden

View Full Version : SQL CASE COUNT()



tarkusch
18-04-13, 10:34
Hallo liebes Forum,

ich hätte gerne eine Nummer SNR aufgelistet wie oft sie in einer anderen Datei(Feld FD1) vorkommt bzw. in Verbindung steht.


SELECT SNR,
Case when
(Select COUNT(*) FROM BWP, BSP WHERE SNR = FD1) > 0 then COUNT(SNR) else 0 end ,
DAT, TIM FROM BWP, BSP WHERE SNR
= FD1 AND SNR <> ' ' AND DAT >= 0 AND BHND >= 0 OR
(SNR not in(select fd1 from BWP)) GROUP BY SNR ,
DAT, TIM

Anzeige:
Nummer Ausdruck CASE
200 15.341
100 1

Nummer 200 hat keine Verbindung zur anderen Datei, aber da bekomme ich die Maximale Anzahl der Sätze von der ganzen Datei.
Was ist falsch an meinem Statement?

Gruß

Tarki

Pikachu
18-04-13, 10:51
Probiers mal so:

SELECT FELD1, COALESCE(ANZAHL, 0)
FROM DATEI1 LEFT OUTER JOIN (
SELECT FELD2, COUNT(*) AS ANZAHL
FROM DATEI2 GROUP BY FELD2) AS D2 ON FELD1=FELD2

BenderD
18-04-13, 10:53
... alles viel zu kompliziert, ein einfacher subselect tut es:

select e.snr, (select count(*)
from andereTabelle a
where e.snr = a....
...) anzahl, e.nocheinFeld...

from eineTabelle e

D*B

tarkusch
18-04-13, 11:38
Hallo,

der Subselect war auch meine erste Überlegung, aber da bekomme ich in beiden Fällen immer eine 1 zurückgeliefert


SELECT SNR,
(Select COUNT(*) FROM BWP D, BSP C WHERE D.SNR = C.FD1) ANZAHL,
DAT, TIM FROM BWP A, BSP B
WHERE SNR <> ' ' AND DAT >= 0 AND BHND >= 0 OR
(SNR not in(select fd1 from BWP)) GROUP BY SNR ,
DAT, TIM

Fuerchau
18-04-13, 11:56
Du zählst ja auch die falsche Datei!
da BWP auch deine Hauptdatei ist, erhälst du immer die 1.
Du musst die BSP zählen:

(Select COUNT(*) FROM BSP C WHERE A.SNR = C.FD1) ANZAHL,

B.Hauser
18-04-13, 12:29
Könnte es nicht sein, das dieser einfache Join ohne Subselect oder Common Table Expression das gewünschte Ergebnis liefert?


SELECT SNR, Count(Fld1) Anzahl,
DAT, TIM
FROM BWP Left Outer join BSP on SNR = FD1
WHERE SNR <> ' '
AND DAT >= 0
AND BHND >= 0
GROUP BY SNR , DAT, TIM

Birgitta

tarkusch
18-04-13, 12:37
Danke euch allen,

Fürchau hatte damit recht das ich die Falsche Datei zähle. Peinlicher Denkfehler.

Lg

Fuerchau
18-04-13, 14:00
@Birgitta
Bei einer 1:N-Beziehung liefert dieser SQL die Daten aus BWP mehrfach, was hier nicht gewünscht wird.
Ein Group By verlangsamt das ganze nur.