PDA

View Full Version : SQL Anzahl wenn mehrer Felder gleich sind



post
28-04-14, 07:51
Hallo zusammen,

folgende Anfrage würde ich gerne versuchen mit SQL zu lösen. Dies ist meine erste Anfrage hier in dem Forum also lasst bitte etwas Nachsicht walten lassen falls ich etwas vergessen habe, mich undeutlich ausdrücke... auch bin ich ein ziemlicher Neuling in Sachen DB2 / SQL (also super Vorraussetzungen)

Beispiel :-)



<TBODY>
FELDA

FELDB

ZAEHLER



4711

A

1



4712

A

1



4711

B

1



4711

A

2



4711

A

3



4713

C

1


</TBODY>


=> der ZAEHLER ist das Feld welches ich füllen möchte. In Abhängikeit von FELDA und FELDB.
Wenn FELDA und FELDB gleich sind soll das Feld ZAEHLER hochzählen. Beginnend bei 1 und dann immer +1, je nachdem wie häufig FELDA und FELDB den gleichen Inhalt haben.


Hoffe Ihr vertseht meine Frage UND könnt mir eine Funktion unter SQL nennen mit der ich das hinbekomme.
Vielen Dank schonmal !!!

andreaspr@aon.at
28-04-14, 08:11
Hallo,

ich würde mir ein RPG PGM schreiben, wo ich diese Tabelle sortiert nach FELDA, FELDB im Updatemodus einlese.
Da kannst du dann in der Schleife prüfen ob die Werte gleich sind.
Und dann den Zähler updaten.

lg Andreas

post
28-04-14, 08:29
Danke für deine Antwort - ja mit RPG/CL weiß ich wie es geht.
Würde das aber lieber mit einem SQL Statement erledigen, dachte vllt. gibts hierzu ne Funktion o.ä. ?

andreaspr@aon.at
28-04-14, 08:57
Du kannst dir schon ein sehr komplexes SQL mit den Grouping Funktionen, Subselects u.ä. basteln.
Ich fürchte nur, dass der Kosten/Nutzen-Faktor überhaupt nicht gegeben ist.

Pikachu
28-04-14, 09:06
Da gibts wohl ab V5R4 spezielle Funktionen, mit denen sowas möglich ist (http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/11541-Nummerierung-innerhalb-einer-Gruppierung?p=47383#post47383).


SELECT FELDA, FELDB, ROW_NUMBER() OVER (PARTITION BY FELDA, FELDB ORDER BY FELDA) AS ROWNBR FROM Datei

post
28-04-14, 09:07
Du kannst dir schon ein sehr komplexes SQL mit den Grouping Funktionen, Subselects u.ä. basteln.
Ich fürchte nur, dass der Kosten/Nutzen-Faktor überhaupt nicht gegeben ist.

=> nein das möchte ich nicht :-)
hin und wieder muß ich solche zählungen halt 'on-the-fly' machen und da dachte ich geht es evtl. schneller, einfacher mit nem kleinen SQL.

post
28-04-14, 09:13
Da gibts wohl ab V5R4 spezielle Funktionen, mit denen sowas möglich ist (http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/11541-Nummerierung-innerhalb-einer-Gruppierung?p=47383#post47383).

DAS ist es - vielen vielen dank herr pikachu !

B.Hauser
28-04-14, 09:14
Das Ermitteln des Zählers ist mit den OLAP-Ranking-Funktionen, wie Pikachu gezeigt hat kein Problem. Allerdings benötigt man für den Update entweder einen Cursor oder wie Andreas gesagt hat ein komplexes SQL-Statement.

Birgitta

post
28-04-14, 09:36
Das Ermitteln des Zählers ist mit den OLAP-Ranking-Funktionen, wie Pikachu gezeigt hat kein Problem. Allerdings benötigt man für den Update entweder einen Cursor oder wie Andreas gesagt hat ein komplexes SQL-Statement.

Birgitta

hallo brigitta,

da hab ich mich wohl zu früh gefreut als der 'select' funktioniert hat.
genau das problem mit dem update habe ich nämlich nun...
was meinst du denn mit einem 'cursor' in bezug auf das sql statement?

danke
gruß
michael

BenderD
28-04-14, 10:39
... der Zähler ist bei der vorliegenden Aufgabenstellung vollkommen nutzlos, da die Reihenfolge der Sätze für SQL nicht festlegbar ist und demzufolge zufällig sein kann. Sind weitere Kriterien vorhanden, die eine Reihenfolge definieren, ist die Aufgabenstellung mit einem subselect elementar lösbar.

D*B