Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

DB2 Datenbank - SQL Abfrage

Frage Entwicklung Datenbanken

Mitglied: predator1984

predator1984 (Level 1) - Jetzt verbinden

10.10.2007, aktualisiert 26.10.2007, 10806 Aufrufe, 8 Kommentare

Standard SQL-Abfrage
Hallo liebe Forumsmitglieder, bin neu im Forum, daher ein herzliches Hallo an alle!!

Ich bin momentan mit einer SQL-Abfrage beschäftigt, bei der ich bisher keinen Lösungsansatz habe:

Es handelt sich um eine ziemlich große DB2-Datenbank, bei der Abfrage werden mehrere Tabellen selektiert mithilfe zweier Inner-Joints!

Es werden Anträge verwaltet, welche alle über eine Vorgangsnummer aber nur einige über eine Versicherungsnummer verfügen.

Nun werden in der bestehenden Abfrage alle Anträge in Bearbeitung mit ihrem derzeitigen Status im System ausgegeben.

Die Ausgabe erfolgt sortiert nach Jahr und Monat und gruppiert nach dem derzeitigen Status. Zudem wird die Anzahl der Anträge je Status im enstprechenden Monat ausgewiesen.

Nun soll, vorausgesetzt der Antrag hat den Status XY und es ist eine Versicherungsnummer vorhanden, der Antrag unter einem anderen Status "YZ" im Abfrageergebnis erscheinen und natürlich auch zahlenmäßig ausgewiesen werden.

Hätte da jemand ne Idee? Ich dachte schon an If-Abfragen oder Vergleichsabfragen mit UNION?

Bisher klappt irgendwie nix richtig...

Greeetz and thx...
Sebastian F
Mitglied: Biber
10.10.2007 um 20:26 Uhr
Moin predator1984,

willkommen im Forum.

Bitte teile uns noch mit,
  • ob Du von einer DB2/zOS oder einer UDB oder der Version 7, der 8.1 oder der 9er redest
  • ob die Tabelle und Felder auch Namen haben, unter denen wie sie ansprechen dürfen
  • wie die Rückgabe-Feldnamen in dem Resultset heißen sollen.
  • wie die gemeinsamen Schlüssel für einen INNER oder LEFT Join heißen
  • wie die Kardinalitäten (1:1 oder 1:n oder m:n) zwischen den beteiligten Tabellen aussehen
  • und, falls es schon ein SQL-Statement gibt, dann auch das.

Und dann kann's losgehen.

Grüße
Biber
Bitte warten ..
Mitglied: predator1984
11.10.2007 um 09:39 Uhr
Hallo Biber, also

ich versuch mal zu antworten:

Database Product Name: DB2/LINUXX8664
Database Product Version: SQL09010
Driver Name: IBM DB2 JDBC Universal Driver Architecture
Driver Version: 2.10.27

Die Datenbank heißt eba_zvk, die beiden wichtigsten Tabellen geschaeftsobjekt_header und schluesselwerte, die entsprechenden Feldnamen stehen im Statement unten.

Es soll lediglich unterschieden werden, ob ein Datensatz (Vorgang) den Status "in Bearbeitung" hat (a.geschaeftsobjekt_status_cd = "8") und bereits eine oder keine Versicherungsnummer hat (a.vsnr is (not) null). Diese Tatsache soll dann im Abfrageergebnis erscheinen (als zusätzlicher Status) und zahlenmäßig ausgewiesen werden.

Die beiden Inner-Joints sowie die Kardinalitäten kann man ebenfalls im Statement erkennen.

Hier ist das vorhandene SQL Statement:
01.
select 
02.
substr(char(a.letzte_aenderung),3,2) || '.' || substr(char(a.letzte_aenderung),6,2) "Monat", 
03.
 
04.
   b.text "Status", 
05.
  
06.
 sum(a.beitrag) "Summe der Beiträge", 
07.
 count(a.beitrag) "Anzahl" 
08.
 
09.
from 
10.
11.
    eba_zvk.geschaeftsobjekt_header a 
12.
       left outer join 
13.
    eba_zvk.schluesselwerte b 
14.
       on a.komponente_cd = '4' and a.geschaeftsobjekt_status_cd = b.key and b.domain = 'AAV_geschaeftsobjekt_header_status' 
15.
16.
      left outer join 
17.
   eba_zvk.schluesselwerte c 
18.
      on a.spartenstatus_cd = c.key and c.domain = 'AAV_geschaeftsobjekt_header_spartenstatus', 
19.
   eba_zvk.partner_geschobj d, 
20.
   eba_zvk.schluesselwerte e, 
21.
   eba_zvk.partner f, 
22.
   eba_zvk.nrs_vertriebseinheit g, 
23.
   eba_zvk.zuord_aav_zu_ve h 
24.
where 
25.
   a.geschaeftsobjekt_id = d.geschaeftsobjekt_id and 
26.
   a.komponente_cd = d.komponente_cd and 
27.
   d.rolle_cd = e.key and e.domain = 'AAV_partner_geschobj_rolle' and e.text = 'Versicherungsnehmer' and 
28.
   a.geschaeftsobjekt_status_cd is not null and a.geschaeftsobjekt_status_cd = b.key and b.domain = 'AAV_geschaeftsobjekt_header_status' and 
29.
   d.partner_id = f.id and 
30.
   h.entitaet_id = a.id and 
31.
   h.ve_id = g.id  
32.
 
33.
   and a.eba_antragsnummer <> '' 
34.
  
35.
in  
36.
 
37.
(select  
38.
count i.vsnr 
39.
from 
40.
41.
    eba_zvk.geschaeftsobjekt_header i 
42.
       left outer join 
43.
    eba_zvk.schluesselwerte j 
44.
       on i.komponente_cd = '4' and i.geschaeftsobjekt_status_cd = j.key and j.domain = 'AAV_geschaeftsobjekt_header_status' 
45.
46.
      left outer join 
47.
   eba_zvk.schluesselwerte k 
48.
      on i.spartenstatus_cd = k.key and k.domain = 'AAV_geschaeftsobjekt_header_spartenstatus', 
49.
   eba_zvk.partner_geschobj l, 
50.
   eba_zvk.schluesselwerte m, 
51.
   eba_zvk.partner n, 
52.
   eba_zvk.nrs_vertriebseinheit o, 
53.
   eba_zvk.zuord_aav_zu_ve p 
54.
 
55.
where 
56.
   i.geschaeftsobjekt_id = l.geschaeftsobjekt_id and 
57.
   i.komponente_cd = l.komponente_cd and 
58.
   l.rolle_cd = m.key and m.domain = 'AAV_partner_geschobj_rolle' and m.text = 'Versicherungsnehmer' and 
59.
   i.geschaeftsobjekt_status_cd is not null and i.geschaeftsobjekt_status_cd = j.key and j.domain = 'AAV_geschaeftsobjekt_header_status' and 
60.
   l.partner_id = n.id and 
61.
   p.entitaet_id = i.id and 
62.
   p.ve_id = o.id  
63.
 
64.
   and i.eba_antragsnummer <> ''  
65.
 
66.
 
67.
group by substr(char(a.letzte_aenderung),3,2) || '.' || substr(char(a.letzte_aenderung),6,2), b.text  with rollup 
68.
order by 1, 2;
Für einen guten Ansatz wäre ich dankbar...

Gruß
predator1984
Bitte warten ..
Mitglied: Biber
11.10.2007 um 22:34 Uhr
So, predator,

gelesen und nachvollzogen haben wir es nun alle.... kannst Du noch mal die Änderung verglichen mit dem heutigen Resultset spezifizieren bitte?
Nun soll, vorausgesetzt der Antrag hat den Status XY und es ist eine Versicherungsnummer vorhanden, der Antrag unter einem anderen Status "YZ" im Abfrageergebnis erscheinen und natürlich auch zahlenmäßig ausgewiesen werden.

? Welcher Status XY ist gemeint ?
? Welche "Versicherungsnummer" ist gemeint... mit bloßen Auge finde ich sie nicht (dabei habe ich es schon sicherheitshalber auf <code> umformatiert.

Kannst Du noch mal geduldig sein....

Grüße
Biber
Bitte warten ..
Mitglied: predator1984
12.10.2007 um 09:17 Uhr
Hiho,

mit Status XY meinte ich im ersten Posting den Status "in Bearbeitung". Dies lässt sich mit a.geschaeftsbjekt_status_cd="8" überprüfen.

Jeder Vorgang erhält an einem bestimmten Punkt der Bearbeitung eine "Versicherungsnummer". Sie steht im Feld a.vsnr. Sollte a.vsnr null sein, hat der Vorgang noch keine Versicherungsnummer. Dies ist die zweite Prüfbediungung...

Gruß
predator1984
Bitte warten ..
Mitglied: predator1984
12.10.2007 um 09:40 Uhr
Sorry,

die hälfte vergessen:

Das heutige Resultset sieht so aus:

Letzte Änderung Status Summe der Beiträge Anzahl

07.04 Antrag bei VKB in Bearbeitung 41.79 3
07.04 Freigabe unterbrochen 40.90 3
07.04 Policierung gestartet 26.38 3
07.04 Übergabe gescheitert 9.06 1


Das Datum der letzten Änderung des Vorgang, der aktuelle Status. "In Bearbeitung" ist in diesen Falle "Antrag bei VKB in Bearbeitung". Die "Summe Beiträge" sind die aufaddierten Beiträge zum Vorgang (sum(a.beitrag) "Summe der Beiträge"), die "Anzahl" ist die Anzahl der entsprechenden Vorgänge in diesem Status ( count(a.beitrag) "Anzahl"). Gruppiert ist das ganze nach Monat und Jahr.

Das neue Resultset soll bei den Datensätzen, die den Status "Antrag bei VKB in Bearbeitung" unterscheiden, ob sie eine oder keine Vorgangsnummer haben und eine zusätzliche Zeile im Resultset ausgeben "ohne Vorgangsnummer" und "mit Vorgangsnummer" und entsprechend die Anzahl ausgeben..

Praktisch sollen zwei zusätzliche Stati angezeigt werden, ohne dass sie Ursprungstabelle abgeändert werden muss...

Gruß
predator1984
Bitte warten ..
Mitglied: Biber
15.10.2007 um 20:47 Uhr
Moin predator1984,

kann sein, dass ich das zu locker sehe, aber IMHO brauchst Du nur oben in dem fließend lesbaren Teil des Statements einzugreifen:

01.
select 
02.
substr(char(a.letzte_aenderung),3,2) || '.' || substr(char(a.letzte_aenderung),6,2) "Monat", 
03.
 
04.
   b.text "Status", 
05.
  
06.
 sum(a.beitrag) "Summe der Beiträge", 
07.
 Sum( case WHEN (a.geschaeftsbjekt_status_cd="8" and a.vsnr IS NOT NULL) 
08.
           THEN 1  
09.
           ELSE 0  
10.
      END ) 
11.
      as "Mit VSNr",   
12.
 Sum( case WHEN (a.geschaeftsbjekt_status_cd="8" and a.vsnr IS NULL) 
13.
           THEN 1  
14.
           ELSE 0  
15.
      END ) 
16.
      as "Ohne VSNr",   
17.
 
18.
 count(a.beitrag) "Anzahl" 
19.
..... 
20.
[Rest wie gehabt]
Grüße
Biber
Bitte warten ..
Mitglied: predator1984
17.10.2007 um 09:16 Uhr
hiho, danke mal für die Antwort, teste sobald die Möglichkeit besteht...
Bitte warten ..
Mitglied: Biber
26.10.2007 um 19:45 Uhr
Moin Predator1984,

Nachfrage: kannst Du schon abschätzen, wann wieder die Möglichkeit besteht?

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Datenbanken
DB2 Datenbank-Alias ermitteln
gelöst Frage von goodbytesDatenbanken2 Kommentare

Hallo, mit dem Befehl: kann ich die Informationen zur aktuell verwendeten DB2-Datenbank ermitteln. Ich möchte aber davon dur den ...

PHP
Abfrage SQL
gelöst Frage von dudeldoedelPHP3 Kommentare

Hallo zusammen, kann man das in einer SQL Abfrage erreichen ??? Feldwert lautet: {"565":{"textinput":{"comment":"1400"}}} als Ergebnis soll ausgelesen werden ...

Datenbanken
DB2 Daten in Windows DB2 kopieren
gelöst Frage von SprudiDatenbanken1 Kommentar

Liebe Community, wir haben eine DB2 Datenbank auf einer AS400 (iSeries). Das Ziel soll sein eine lauffähige Kopie der ...

Windows Server
WMI Datenbank Abfrage - Berechtigungen
Frage von tobdadWindows Server2 Kommentare

Hallo Leute, ich habe ein Problem mit der Abfrage der WMI Datenbank. Über ein Programm Frage ich darin enthaltene ...

Neue Wissensbeiträge
Datenschutz

Weitere Inforamtionen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 2 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 3 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 6 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 12 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
Frage von Winfried-HHBatch & Shell15 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...