AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken wo nichts ist kann man nichts zählen?
Thema durchsuchen
Ansicht
Themen-Optionen

wo nichts ist kann man nichts zählen?

Ein Thema von p80286 · begonnen am 9. Okt 2012 · letzter Beitrag vom 10. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

wo nichts ist kann man nichts zählen?

  Alt 9. Okt 2012, 12:56
Datenbank: oracle • Version: 10 • Zugriff über: egal
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

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

  Alt 9. Okt 2012, 13:21
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 9. Okt 2012, 13:25
Du könntest ein Select, mit Subselect dranhängen?

Zitat:
...
union
select XXX, 'Sonstiges'
für XXX ein (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 SELECT count(...) immer einen Datensatz zurück?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
weisswe
(Gast)

n/a Beiträge
 
#4

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

  Alt 9. Okt 2012, 13:27
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)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 9. Okt 2012, 13:28
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

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

  Alt 9. Okt 2012, 13:47
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)
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 9. Okt 2012, 14:30
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 9. Okt 2012, 14:36
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?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 9. Okt 2012, 14:49
NVL ist so etwas wie IFNULL, nicht mit CASE verwechseln. Ich nehme halt nur lieber CASE, damit lassen sich auch andere Fälle abbilden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 9. Okt 2012, 14:52
SELECT SUBSTR(NULL, 1, 1) FROM dual liefert mir einen Leerstring.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.
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