Row Number Function wie bzw. an welcher Stelle im Query einsetzen

why not? Nur sieht mir die Syntax falsch aus, das zweite Komma ist falsch. Und Coalesce mit einer fixen Wert als ersten macht nicht so ganz viel Sinn.
 
Werbung:
Hallo akretschmer

Naja er soll ja nur die 2 Unterscheidungen treffen .. wenn 1 nicht da ist in dem Datensatz dann nimm die 175

macht er das dann nicht so, wenn ich das so einfüge:

Code:
where RELFIRMA.FIRMANR not like 'I%'
and infor.relfirma.firmanr not like '70%'
-- and infor.relansch.verwendung1 = '101'
and infor.relansch.verwendung1 = COALESCE ( 1,175)
 
coalesce(1, 175) wird aber dann immer 1 sein. Sinn macht es mehr, wenn Du im coalesce einen variablen Wert, z.B. den Inhalt einer Spalte, prüfst.
 
Morgen,

Es ist so, das der Wert der Spalte immer variert aber es gibt zB. Datensätze die sowohl 1 als auch 175 haben.
Sprich, es sind 2 Datensätze vorhanden

Ich will aber einen Fallback auf 175 falls 1 nicht vorhanden ist und 1 wird genommen falls es vorhanden ist und nicht 175.

Bin mir nicht sicher, ob das mit coalscene noch geht, da er ja ( soviel ich das jetzt verstanden habe) der den ersten Wert ungleich null zurückgibt... aber in welcher Reihenfolge eigentlich ?.

grüße skyerjoe
 
Das einem JOIN unterzubringen dürfte schwer wenn nicht unmöglich sein (außer vielleicht man baut sich mit PL/SQL irgendein krankes Konstrukt aber das wollen wir nicht).
Einfacher ist es, wenn man die Spalte MIN(infor.relansch.verwendung1) ins SELECT mit aufnimmt, und die restlichen nicht aggregierten Spalten ins GROUP BY packt.

Falls es neben den Werte 1 und 175 weitere Ausprägungen gibt, wird die WHERE Bedingung durch
Code:
and infor.relansch.verwendung1 IN (1,175)

ergänzt.
 
Hallo drdimitri

Es kommt beim setzen von MIN(infor.relansch.verwendung1) diese Fehlermeldung:

Code:
ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"
*Cause:   
*Action:
Fehler in Zeile: 5 Spalte: 14

Nach ein bisschen Recherche muss ich glaube ich noch ein Group By setzen

Wo muss denn mein Group By stehen? Habe es in dem T.rnk subquery gesetzt
aber das scheint nicht zu klappen und ganz am schluss von dem query auch nicht ...

1. Versuch:

Code:
left outer JOIN INFOR.RELZTSPE RELZTSPE
ON (RELACP.TEXT1 = RELZTSPE.ZTKEY)
left outer JOIN INFOR.RELZTZB RELZTZB
ON (RELACP.ZBED = RELZTZB.ZTKEY)
where RELFIRMA.FIRMANR not like 'I%' 
and infor.relansch.verwendung1 like '1'
group by RELFIRMA.FIRMANR
) t

2. Versuch:

Code:
WHERE t.rnk = 1
-- and rownum <  100
ORDER BY t.company
group by RELFIRMA.FIRMANR


Ich hab echt auch schwierigkeiten zu sehen, wo ich jetzt solche Funktionen in einem komplizierteren Query setzten muss.

grüße skyerjoe
 
Also mit GROUP BY ginge es sicherlich aber das beißt sich eventuell mit dem Rest des Querys. Ich würde zu einer Unterabfrage greifen, auch wenn das nicht so schön performant ist. Da ich den ganzen Code auch nicht mehr überblicke, hier mal ein Beispiel in Pseudo-Code:
Code:
SELECT *
FROM tabelle1 t1
LEFT JOIN tabelle2 t2 ON t1.PK = t2.FK
WHERE t2.verwendung = 1
OR NOT EXISTS (
SELECT * FROM tabelle2 WHERE tabelle2.FK = t1.PK AND tabelle2.verwendung = 1
)
AND t2.verwendung = 175
Man beachte unbedingt die korrekte Verwendung oder Nicht-Verwendung von Aliasen. Der Subselect hinter NOT EXISTS greift auf einen Wert aus dem Hauptselect zu, irgendwo müssen also Aliase genutzt werden.
 
Hallo Ukulele

Danke ich schaue mir das mal an ob ich da durchsteige wie ich diese Subslect in mein Query einsetzten muss.

grüße skyerjoe
 
Hallo miteinander

Also das mit den Firmenabfrage habe ich soweit hingekriegt. Habe unsere Leute dazu verdonnert die Firmen mit Standardadresse einzutragen .
Danke vielmals

Jetzt habe ich noch ein anderes Problem soll ich dafür einen neuen Thread eröffnen ?

Oder diesen Fortsetzten ist ein ähnliches Problem er müßte diesmal eine Fallunterscheidung bei den Sprachen geben da ich dafür keine eindeutige satznummer ( 1,175 etc) habe wie bei den firmen.

grüße skyerjoe
 
Werbung:
Zurück
Oben