Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   wo nichts ist kann man nichts zählen? (https://www.delphipraxis.net/170900-wo-nichts-ist-kann-man-nichts-zaehlen.html)

p80286 9. Okt 2012 11:56

Datenbank: oracle • Version: 10 • Zugriff über: egal

wo nichts ist kann man nichts zählen?
 
Hallo zusammen,

Ich habe eine einfache Abfrage, die das vorkommen verschiedener Datensätze zählt:
Code:
select count(cases.casekey) cnt,substr(v_mk.busunit,1,1) bu
from ..
group by substr(v_mk.busunit,1,1)
das Ergebnis:
Code:
       CNT B
---------- -
        10 W
        14 K
        14 A
Jetzt benötige ich noch eine weitere Ergebniszeile für sonstige Werte
Code:
       0 Sonstiges
Diese Zeile soll immer vorhanden sein, mit 0 wenn es keine sonstigen Werte gibt,
oder aber mit der richtigen Zählung. (das hab ich)

mit NVL hab ich noch kein Glück gehabt.

Könnt Ihr mir da weiter helfen?

Gruß
K-H

Furtbichler 9. Okt 2012 12:21

AW: wo nichts ist kann man nichts zählen?
 
Du könntest es mit einem billigen Union versuchen
Code:
select count(cases.casekey) cnt,cast(substr(v_mk.busunit,1,1) as varchar(9)) bu
from ..
where not theSonstigeBeinhaltn
group by substr(v_mk.busunit,1,1)
union
select count(cases.sonstige),'Sonstige'
from
  ...
where Sonstige Beinhaltn

himitsu 9. Okt 2012 12:25

AW: wo nichts ist kann man nichts zählen?
 
Du könntest ein Select, mit Subselect dranhängen?

Zitat:

...
union
select XXX, 'Sonstiges'
für XXX ein
Delphi-Quellcode:
(select count(1) from ...)
.
dann gab's doch irgendeinen Befehl "nimm AAA und wenn AAA = NULL/Nix, dann nimm BBB" und BBB ist halt 0.


[edit]
Git denn
Delphi-Quellcode:
SELECT count(...)
immer einen Datensatz zurück?

weisswe 9. Okt 2012 12:27

AW: wo nichts ist kann man nichts zählen?
 
Hallo!

Wenn du in der Tabelle/View NULL werte hast, werden diese beim Count angezeigt.
Möchtest du aber statt der "Leerzeile" "Sonstiges" schreiben, dann verwende NVL.
Die Frage ist ob du das so willst oder wie Furtbichler oder himitsu es beschrieben haben...

Code:
select count(1) cnt, nvl(substr(v_mk.busunit,1,1), 'Sonstiges') bu
from ..
group by substr(v_mk.busunit,1,1)

DeddyH 9. Okt 2012 12:28

AW: wo nichts ist kann man nichts zählen?
 
Das FROM und das WHERE wären noch interessant, Du verknüpfst ja 2 Tabellen. Da könnte man dann ein CASE einbauen, wenn ich das richtig verstanden habe, das im NULL-Fall eben "Sonstiges" ausgibt.

p80286 9. Okt 2012 12:47

AW: wo nichts ist kann man nichts zählen?
 
Vielen dank für die Anregungen, jetzt klappts.
Für die die es interessiert:
(ist nicht schön, aber die Zeit drängt)
Code:
select a_c
      ,k_c
      ,w_c
      ,nvl(misc_c,0) misc_c
from
(
  select 1 key,nvl(cnt,0) a_c
  from (
    select count(cases.casekey) cnt,substr(v_mk.busunit,1,1) bu
    .....) cnt
  where cnt.bu='A') full outer join
 (select 1 key, nvl(cnt,0) k_c
  from (
        select count(cases.casekey) cnt,substr(v_mk.busunit,1,1) bu
        ........) cnt
    where cnt.bu='K') on 1=1
full outer join
 (select 1 key, nvl(cnt,0) w_c
  from (
        select count(cases.casekey) cnt,substr(v_mk.busunit,1,1) bu
        ...) cnt
  where cnt.bu='W') on 1=1
full outer join
 (select 1 key, cnt misc_c
  from (
        select count(cases.casekey) cnt,substr(v_mk.busunit,1,1) bu
        ....) cnt
    where (cnt.bu<>'A' and cnt.bu<>'K' and cnt.bu<>'W') or cnt.bu is null
    )
on 1=1
Es gibt eine Abfrage die zählt (A,K,W,Sonst),
deren Ergebnis wird aufgeteilt und in 4 Feldern zurück gegeben.
(ist für das ausfüllen eines Formulars notwendig)

auch wenn es jetzt funktioniert, vielleicht hat der eine oder andere noch einen Verbesserungsvorschlag.
Vielen Dank nochmal.

Gruß
K-H

P.s.
@Himitsu
ich denke Du meinst decode(wert,null,0,eins,1,..,rest)

DeddyH 9. Okt 2012 13:30

AW: wo nichts ist kann man nichts zählen?
 
Vielleicht ungefähr so (ungetestet):
SQL-Code:
SELECT
  COUNT(cases.casekey),
  (CASE
     v_mk.FK --hier Verknüpfungsfeld eintragen
   WHEN
     NULL
   THEN
     'Sonstiges'
   ELSE
     SUBSTR(v_mk.busunit,1,1)
   END)
FROM
  cases
LEFT JOIN
  v_mk
    ON v.mk.FK = cases.PK --hier verknüpfte Felder eintragen
    AND SUBSTR(v_mk.busunit,1,1) IN ('A', 'K', 'W')
GROUP BY
  v_mk.busunit

himitsu 9. Okt 2012 13:36

AW: wo nichts ist kann man nichts zählen?
 
CASE:
Ich glaub in Oracle gibt es davür das NVL. (siehe in Einigen der anderen Antworten)
http://www.techonthenet.com/oracle/functions/nvl.php


Aber was liefert denn SUBSTR zurück, wenn der "String" NULL ist?

DeddyH 9. Okt 2012 13:49

AW: wo nichts ist kann man nichts zählen?
 
NVL ist so etwas wie IFNULL, nicht mit CASE verwechseln. Ich nehme halt nur lieber CASE, damit lassen sich auch andere Fälle abbilden.

DeddyH 9. Okt 2012 13:52

AW: wo nichts ist kann man nichts zählen?
 
SQL-Code:
SELECT SUBSTR(NULL, 1, 1) FROM dual
liefert mir einen Leerstring.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz